apoc.json.path
Function APOC Core
apoc.json.path('{json}' [,'json-path' , 'path-options'])
Signature
apoc.json.path(json :: STRING?, path = $ :: STRING?, pathOptions = null :: LIST? OF STRING?) :: (ANY?)
Usage Examples
The examples in this section are based on the following sample graph:
CREATE (:Person {json:'{a:[1,2,3]}'});
MATCH (p:Person)
RETURN apoc.json.path(p.json, "$.a") AS output;
Output |
---|
[1, 2, 3] |
Moreover, we can customize the Json path options, adding as third parameter (pathOptions
) a list of strings,
where the strings are based on Enum<Option>.
The default value is ["SUPPRESS_EXCEPTIONS", "DEFAULT_PATH_LEAF_TO_NULL"]
. Note that we can also insert []
, that is "without options".
So we can execute (with default pathOptions):
RETURN apoc.json.path('{ "columns": {
"col2": {
"_id": "772col2"
}
}
}', '$..columns') AS output;
Output |
---|
[ {"col2": { "_id": "772col2" }}, null, null ] |
or, with custom path options:
RETURN apoc.json.path('{ "columns": {
"col2": {
"_id": "772col2"
}
}
}', '$..columns', ['ALWAYS_RETURN_LIST']) AS output;
Output |
---|
[ {"col2": { "_id": "772col2" }} ] |
Also, we could leverage the apoc.json.validate
procedure (provided with APOC full) to handle incorrectly formatted JSONs by continuing the execution instead of causing it to fail.
For example, the following query returns 0 instead of failing due to InputCoercionException: Numeric value (18446744062065078016838) out of range
:
WITH '{
"foo": ["1", {"bar": 18446744062065078016838}, {"baz": 18446744062065078016838} ],
"baz": 7
}' as json
CALL { WITH json CALL apoc.json.validate(json) YIELD value RETURN collect(value) AS errs }
RETURN CASE errs WHEN [] THEN apoc.json.path(json) ELSE 0 END AS value