Versionen: Neo4j 3.2.2 Community; APOC 3.2.0.3apoc.convert.fromJsonMap() verarbeitet in Zeichenfolgen keine fehlerhaften Zeichen
Escaped Zeichen in Zeichenfolgen werden nicht in allen Instanzen korrekt behandelt.
Dies funktioniert wie erwartet:
WITH apoc.convert.fromJsonMap('{"a":42,"b":"foo\\bar","c":[1,2,3]}') AS p RETURN p.b
╒═════════╕
│ "pb" │
╞═════════╡
│ "foo \ bar" │
└─────────┘
zitiert Escaping funktioniert nicht wie erwartet:
WITH apoc.convert.fromJsonMap('{"a":42,"b":"\"foo\"","c":[1,2,3]}')
AS p RETURN p.b
Neo.ClientError.Procedure.ProcedureCallFailed Funktion aufzurufen fehlgeschlagen apoc.convert.fromJsonMap
: Verursacht durch: java.lang.RuntimeException: Kann nicht konvertieren { "a": 42, "b": "" foo "", "c „: [1,2,3]} mit Pfad
Verdoppeln auf der Rückseite Solidus zur Karte (nicht wünschenswert) gibt dieses Ergebnis:
WITH apoc.convert.fromJsonMap('{"a":42,"b":"\\"foo\\"","c":[1,2,3]}') AS p RETURN p.b
╒═════════╕
p "pb" │
╞═════════╡
│ "\" foo \ "" │
└─────────┘
Ein entkommen Zeilenendezeichen den gleichen Fehler erhält:
WITH apoc.convert.fromJsonMap('{"a":42,"b":"foo\nbar","c":[1,2,3]}') AS p RETURN p.b
Neo.ClientError.Procedure.ProcedureCallFailed Fehler beim Aufrufen der Funktion apoc.convert.fromJsonMap
: Verursacht von: java.lang.RuntimeException: Kann {"a": 42, "b": "foo bar", "c": [1,2,3]} nicht konvertieren Karte mit Pfad
[Beachten Sie, dass der Zeilenumbruch nach "foo" in der Zeichenfolge dargestellt wird, die von der Fehlerverletzung zurückgegeben wird Alter. Die Fehlermeldung wird in zwei Zeilen ausgegeben.]
Ist meine Verwendung dieses Verfahrens korrekt?
Hat jemand dieses Problem gesehen und behoben oder um es herum gearbeitet?
Dies ist eine gute Beobachtung. Die JSON-Eingabezeichenfolge ist jedoch keine wirklich gültige JSON-Zeichenfolge. Ich werde dies jedoch für eine mögliche Problemumgehung berücksichtigen. – jimwilli