2017-07-13 10 views
3

バージョン:Neo4j 3.2.2コミュニティ; APOC 3.2.0.3apoc.convert.fromJsonMap()が文字列のエスケープ文字を正しく処理しない

文字列のエスケープ文字は、すべてのインスタンスで正しく処理されません。

これは期待通りに動作します:

WITH apoc.convert.fromJsonMap('{"a":42,"b":"foo\\bar","c":[1,2,3]}') AS p RETURN p.b 

╒═════════╕
"PB" │
╞═════════╡
││ "FOOの\バー" │期待通りに動作しない引用符をエスケープ
└─────────┘

012 java.lang.RuntimeException:によって引き起こさ:

Neo.ClientError.Procedure.ProcedureCallFailed機能apoc.convert.fromJsonMapを起動に失敗しました42、 "B":{ "A" に変換できません "" FOO ""、 "C 「:[1,2,3]}

が逆固相(望ましくない)にダウン倍増経路と地図は、本結果を与える:

WITH apoc.convert.fromJsonMap('{"a":42,"b":"\\"foo\\"","c":[1,2,3]}') AS p RETURN p.b 

╒═════════╕
│ "pb"│
╞== == == ===
│ "\" のfoo \ "" │
└─────────┘

Anが改行文字が同じエラーを取得し、エスケープ:

WITH apoc.convert.fromJsonMap('{"a":42,"b":"foo\nbar","c":[1,2,3]}') AS p RETURN p.b 

Neo.ClientError.Procedure.ProcedureCallFailed 関数の呼び出しに失敗しましたapoc.convert.fromJsonMap:原因:java.lang.RuntimeException:{"a":42、 "b": "foo bar"、 "c":[1,2,3]}に変換できませんパス付きのマップ

["foo"の後の改行は、エラー混乱によって返された文字列で表されることに注意してください年齢。エラーメッセージは2行に記載されています。]

この手順を正しく使用していますか?

誰でもこの問題を見て、固定したり回避したりしていますか?

答えて

0

エスケープ文字に単一のバックスラッシュの代わりにダブルバックスラッシュを使用すると、実際に機能します。

例えば、これら2つのクエリがtrueを返す両方:

RETURN apoc.convert.fromJsonMap('{"a":42,"b":"\\"foo\\"","c":[1,2,3]}').b = '"foo"'; 

RETURN apoc.convert.fromJsonMap('{"a":42,"b":"foo\\nbar","c":[1,2,3]}').b = 'foo\nbar'; 
+1

これは良い観察であるが。しかし、JSON入力文字列は実際には有効なJSONではありません。私は、潜在的な回避策のためにこれを念頭に置いておきます。 – jimwilli

関連する問題