JSON functions
Arroyo provides two set of JSON functions, the first based on PostgreSQL’s SQL functions and syntax, and the second based on the JSONPath standard.
SQL functions
Section titled “SQL functions”The SQL functions provide basic JSON parsing functions similar to those found in PostgreSQL.
json_contains
Section titled “json_contains”Returns true if the JSON string contains the specified key(s).
SELECT json_contains('{"a": 1, "b": 2, "c": 3}', 'a') FROM source;trueAlso available via the ? operator:
SELECT '{"a": 1, "b": 2, "c": 3}' ? 'a' FROM source;truejson_get
Section titled “json_get”Retrieves the value from a JSON string by the specified path (keys). Returns the value as its native type (string, int, etc.).
SELECT json_get('{"a": {"b": 2}}', 'a', 'b') FROM source;2Also available via the -> operator:
SELECT '{"a": {"b": 2}}'->'a'->'b' FROM source;2Various permutations of json_get functions are available for retrieving values as
a specific type, or you can use SQL type annotations:
SELECT json_get('{"a": {"b": 2}}', 'a', 'b')::int FROM source;2json_get_str
Section titled “json_get_str”Retrieves a string value from a JSON string by the specified path. Returns an empty string if the value does not exist or is not a string.
SELECT json_get_str('{"a": {"b": "hello"}}', 'a', 'b') FROM source;"hello"json_get_int
Section titled “json_get_int”Retrieves an integer value from a JSON string by the specified path. Returns 0
if the value does not exist or is not an integer.
SELECT json_get_int('{"a": {"b": 42}}', 'a', 'b') FROM source;42json_get_float
Section titled “json_get_float”Retrieves a float value from a JSON string by the specified path. Returns 0.0
if the value does not exist or is not a float.
SELECT json_get_float('{"a": {"b": 3.14}}', 'a', 'b') FROM source;3.14json_get_bool
Section titled “json_get_bool”Retrieves a boolean value from a JSON string by the specified path. Returns
false if the value does not exist or is not a boolean.
SELECT json_get_bool('{"a": {"b": true}}', 'a', 'b') FROM source;truejson_get_json
Section titled “json_get_json”Retrieves a nested JSON string from a JSON string by the specified path. The value is returned as raw JSON.
SELECT json_get_json('{"a": {"b": {"c": 1}}}', 'a', 'b') FROM source;'{"c": 1}'json_as_text
Section titled “json_as_text”Retrieves any value from a JSON string by the specified path and returns it as a string, regardless of the original type.
SELECT json_as_text('{"a": {"b": 42}}', 'a', 'b') FROM source;"42"Also available via the ->> operator:
SELECT '{"a": {"b": 42}}'->>'a'->>'b' FROM source;"42"json_length
Section titled “json_length”Returns the length of a JSON object or array at the specified path. Returns 0
if the path does not exist or is not an object/array.
SELECT json_length('{"a": [1, 2, 3]}', 'a') FROM source;3Json path functions
Section titled “Json path functions”JSON functions provide basic json parsing functions using JsonPath, an evolving standard for querying JSON objects.
extract_json
Section titled “extract_json”Returns the JSON elements in the first argument that match the JsonPath in the second argument. The returned value is an array of json strings.
SELECT extract_json('{"a": 1, "b": 2, "c": 3}', '$.a') FROM source;['1']extract_json_string
Section titled “extract_json_string”Returns an unescaped String for the first item matching the JsonPath, if it is a string.
SELECT extract_json_string('{"a": "a", "b": 2, "c": 3}', '$.a') FROM source;'a'