2020-04-03 13:23:32 +00:00
---
toc_priority: 56
2020-06-19 10:16:30 +00:00
toc_title: JSON
2020-04-03 13:23:32 +00:00
---
2020-04-30 18:19:18 +00:00
# Functions for Working with JSON {#functions-for-working-with-json}
2017-12-28 15:13:23 +00:00
2022-03-14 03:19:29 +00:00
ClickHouse has special functions for working with this JSON. The `visitParam` functions make strong assumptions about what the JSON can be, but they try to do as little as possible to get the job done. The following assumptions are made:
2017-12-28 15:13:23 +00:00
2020-03-20 10:10:48 +00:00
1. The field name (function argument) must be a constant.
2. The field name is somehow canonically encoded in JSON. For example: `visitParamHas('{"abc":"def"}', 'abc') = 1` , but `visitParamHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0`
3. Fields are searched for on any nesting level, indiscriminately. If there are multiple matching fields, the first occurrence is used.
2021-05-27 19:44:11 +00:00
4. The JSON does not have space characters outside of string literals.
2017-12-28 15:13:23 +00:00
2020-03-20 10:10:48 +00:00
## visitParamHas(params, name) {#visitparamhasparams-name}
2017-12-28 15:13:23 +00:00
2021-04-17 17:04:32 +00:00
Checks whether there is a field with the `name` name.
Alias: `simpleJSONHas` .
2017-12-28 15:13:23 +00:00
2020-03-20 10:10:48 +00:00
## visitParamExtractUInt(params, name) {#visitparamextractuintparams-name}
2017-12-28 15:13:23 +00:00
2021-05-27 19:44:11 +00:00
Parses UInt64 from the value of the field named `name` . If this is a string field, it tries to parse a number from the beginning of the string. If the field does not exist, or it exists but does not contain a number, it returns 0.
2021-04-17 17:04:32 +00:00
Alias: `simpleJSONExtractUInt` .
2017-12-28 15:13:23 +00:00
2020-03-20 10:10:48 +00:00
## visitParamExtractInt(params, name) {#visitparamextractintparams-name}
2017-12-28 15:13:23 +00:00
The same as for Int64.
2021-04-17 17:04:32 +00:00
Alias: `simpleJSONExtractInt` .
2020-03-20 10:10:48 +00:00
## visitParamExtractFloat(params, name) {#visitparamextractfloatparams-name}
2017-12-28 15:13:23 +00:00
The same as for Float64.
2021-04-17 17:04:32 +00:00
Alias: `simpleJSONExtractFloat` .
2020-03-20 10:10:48 +00:00
## visitParamExtractBool(params, name) {#visitparamextractboolparams-name}
2017-12-28 15:13:23 +00:00
Parses a true/false value. The result is UInt8.
2021-04-17 17:04:32 +00:00
Alias: `simpleJSONExtractBool` .
2020-03-20 10:10:48 +00:00
## visitParamExtractRaw(params, name) {#visitparamextractrawparams-name}
2017-12-28 15:13:23 +00:00
Returns the value of a field, including separators.
2021-04-17 17:04:32 +00:00
Alias: `simpleJSONExtractRaw` .
2017-12-28 15:13:23 +00:00
Examples:
2020-03-20 10:10:48 +00:00
``` sql
2021-04-17 17:04:32 +00:00
visitParamExtractRaw('{"abc":"\\n\\u0000"}', 'abc') = '"\\n\\u0000"';
visitParamExtractRaw('{"abc":{"def":[1,2,3]}}', 'abc') = '{"def":[1,2,3]}';
2017-12-28 15:13:23 +00:00
```
2020-03-20 10:10:48 +00:00
## visitParamExtractString(params, name) {#visitparamextractstringparams-name}
2017-12-28 15:13:23 +00:00
Parses the string in double quotes. The value is unescaped. If unescaping failed, it returns an empty string.
2021-04-17 17:04:32 +00:00
Alias: `simpleJSONExtractString` .
2017-12-28 15:13:23 +00:00
Examples:
2020-03-20 10:10:48 +00:00
``` sql
2021-04-17 17:04:32 +00:00
visitParamExtractString('{"abc":"\\n\\u0000"}', 'abc') = '\n\0';
visitParamExtractString('{"abc":"\\u263a"}', 'abc') = '☺';
visitParamExtractString('{"abc":"\\u263"}', 'abc') = '';
visitParamExtractString('{"abc":"hello}', 'abc') = '';
2017-12-28 15:13:23 +00:00
```
There is currently no support for code points in the format `\uXXXX\uYYYY` that are not from the basic multilingual plane (they are converted to CESU-8 instead of UTF-8).
2019-04-24 04:23:14 +00:00
The following functions are based on [simdjson ](https://github.com/lemire/simdjson ) designed for more complex JSON parsing requirements. The assumption 2 mentioned above still applies.
2020-03-20 10:10:48 +00:00
## isValidJSON(json) {#isvalidjsonjson}
2019-10-12 12:00:46 +00:00
Checks that passed string is a valid json.
Examples:
2020-03-20 10:10:48 +00:00
``` sql
2019-10-12 12:00:46 +00:00
SELECT isValidJSON('{"a": "hello", "b": [-100, 200.0, 300]}') = 1
SELECT isValidJSON('not a json') = 0
```
2020-10-13 17:23:29 +00:00
## JSONHas(json\[, indices_or_keys\]…) {#jsonhasjson-indices-or-keys}
2019-04-24 04:23:14 +00:00
If the value exists in the JSON document, `1` will be returned.
2019-05-16 13:35:31 +00:00
If the value does not exist, `0` will be returned.
2019-04-24 04:23:14 +00:00
Examples:
2020-03-20 10:10:48 +00:00
``` sql
2019-09-23 15:31:46 +00:00
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 1
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 4) = 0
2019-04-24 04:23:14 +00:00
```
2019-05-16 13:35:31 +00:00
`indices_or_keys` is a list of zero or more arguments each of them can be either string or integer.
2019-04-24 04:23:14 +00:00
2020-03-21 04:11:51 +00:00
- String = access object member by key.
- Positive integer = access the n-th member/key from the beginning.
- Negative integer = access the n-th member/key from the end.
2019-04-24 04:23:14 +00:00
2021-05-27 19:44:11 +00:00
Minimum index of the element is 1. Thus the element 0 does not exist.
2019-06-14 12:44:33 +00:00
2019-05-10 08:49:03 +00:00
You may use integers to access both JSON arrays and JSON objects.
2019-04-24 04:23:14 +00:00
So, for example:
2020-03-20 10:10:48 +00:00
``` sql
2019-09-23 15:31:46 +00:00
SELECT JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', 1) = 'a'
SELECT JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', 2) = 'b'
SELECT JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', -1) = 'b'
SELECT JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', -2) = 'a'
SELECT JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 1) = 'hello'
2019-04-24 04:23:14 +00:00
```
2020-10-13 17:23:29 +00:00
## JSONLength(json\[, indices_or_keys\]…) {#jsonlengthjson-indices-or-keys}
2019-04-24 04:23:14 +00:00
2019-05-10 08:49:03 +00:00
Return the length of a JSON array or a JSON object.
2019-04-24 04:23:14 +00:00
2019-05-16 13:35:31 +00:00
If the value does not exist or has a wrong type, `0` will be returned.
2019-04-24 04:23:14 +00:00
Examples:
2020-03-20 10:10:48 +00:00
``` sql
2019-09-23 15:31:46 +00:00
SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 3
SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}') = 2
2019-04-24 04:23:14 +00:00
```
2020-10-13 17:23:29 +00:00
## JSONType(json\[, indices_or_keys\]…) {#jsontypejson-indices-or-keys}
2019-04-24 04:23:14 +00:00
Return the type of a JSON value.
2019-05-16 13:35:31 +00:00
If the value does not exist, `Null` will be returned.
2019-04-24 04:23:14 +00:00
Examples:
2020-03-20 10:10:48 +00:00
``` sql
2019-09-23 15:31:46 +00:00
SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}') = 'Object'
SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') = 'String'
SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 'Array'
2019-04-24 04:23:14 +00:00
```
2020-10-13 17:23:29 +00:00
## JSONExtractUInt(json\[, indices_or_keys\]…) {#jsonextractuintjson-indices-or-keys}
2020-03-20 10:10:48 +00:00
2020-10-13 17:23:29 +00:00
## JSONExtractInt(json\[, indices_or_keys\]…) {#jsonextractintjson-indices-or-keys}
2020-03-20 10:10:48 +00:00
2020-10-13 17:23:29 +00:00
## JSONExtractFloat(json\[, indices_or_keys\]…) {#jsonextractfloatjson-indices-or-keys}
2020-03-20 10:10:48 +00:00
2020-10-13 17:23:29 +00:00
## JSONExtractBool(json\[, indices_or_keys\]…) {#jsonextractbooljson-indices-or-keys}
2019-04-24 04:23:14 +00:00
2019-05-16 13:35:31 +00:00
Parses a JSON and extract a value. These functions are similar to `visitParam` functions.
2019-04-24 04:23:14 +00:00
2019-05-16 13:35:31 +00:00
If the value does not exist or has a wrong type, `0` will be returned.
2019-04-24 04:23:14 +00:00
Examples:
2020-03-20 10:10:48 +00:00
``` sql
2019-09-23 15:31:46 +00:00
SELECT JSONExtractInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 1) = -100
SELECT JSONExtractFloat('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 2) = 200.0
SELECT JSONExtractUInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', -1) = 300
2019-04-24 04:23:14 +00:00
```
2020-10-13 17:23:29 +00:00
## JSONExtractString(json\[, indices_or_keys\]…) {#jsonextractstringjson-indices-or-keys}
2019-04-24 04:23:14 +00:00
2019-05-16 13:35:31 +00:00
Parses a JSON and extract a string. This function is similar to `visitParamExtractString` functions.
2019-04-24 04:23:14 +00:00
2019-05-16 13:35:31 +00:00
If the value does not exist or has a wrong type, an empty string will be returned.
2019-04-24 04:23:14 +00:00
2019-05-16 13:35:31 +00:00
The value is unescaped. If unescaping failed, it returns an empty string.
2019-04-24 04:23:14 +00:00
Examples:
2020-03-20 10:10:48 +00:00
``` sql
2019-09-23 15:31:46 +00:00
SELECT JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') = 'hello'
SELECT JSONExtractString('{"abc":"\\n\\u0000"}', 'abc') = '\n\0'
SELECT JSONExtractString('{"abc":"\\u263a"}', 'abc') = '☺'
SELECT JSONExtractString('{"abc":"\\u263"}', 'abc') = ''
SELECT JSONExtractString('{"abc":"hello}', 'abc') = ''
2019-04-24 04:23:14 +00:00
```
2020-10-13 17:23:29 +00:00
## JSONExtract(json\[, indices_or_keys…\], Return_type) {#jsonextractjson-indices-or-keys-return-type}
2019-05-13 13:46:19 +00:00
2019-05-16 13:35:31 +00:00
Parses a JSON and extract a value of the given ClickHouse data type.
2019-05-13 13:46:19 +00:00
2019-05-16 13:35:31 +00:00
This is a generalization of the previous `JSONExtract<type>` functions.
This means
`JSONExtract(..., 'String')` returns exactly the same as `JSONExtractString()` ,
`JSONExtract(..., 'Float64')` returns exactly the same as `JSONExtractFloat()` .
2019-05-13 13:46:19 +00:00
Examples:
2020-03-20 10:10:48 +00:00
``` sql
2019-05-16 13:35:31 +00:00
SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(String, Array(Float64))') = ('hello',[-100,200,300])
SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(b Array(Float64), a String)') = ([-100,200,300],'hello')
SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 'Array(Nullable(Int8))') = [-100, NULL, NULL]
SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 4, 'Nullable(Int64)') = NULL
SELECT JSONExtract('{"passed": true}', 'passed', 'UInt8') = 1
SELECT JSONExtract('{"day": "Thursday"}', 'day', 'Enum8(\'Sunday\' = 0, \'Monday\' = 1, \'Tuesday\' = 2, \'Wednesday\' = 3, \'Thursday\' = 4, \'Friday\' = 5, \'Saturday\' = 6)') = 'Thursday'
SELECT JSONExtract('{"day": 5}', 'day', 'Enum8(\'Sunday\' = 0, \'Monday\' = 1, \'Tuesday\' = 2, \'Wednesday\' = 3, \'Thursday\' = 4, \'Friday\' = 5, \'Saturday\' = 6)') = 'Friday'
```
2020-10-13 17:23:29 +00:00
## JSONExtractKeysAndValues(json\[, indices_or_keys…\], Value_type) {#jsonextractkeysandvaluesjson-indices-or-keys-value-type}
2019-05-16 13:35:31 +00:00
2020-04-20 10:08:39 +00:00
Parses key-value pairs from a JSON where the values are of the given ClickHouse data type.
2019-05-16 13:35:31 +00:00
Example:
2020-03-20 10:10:48 +00:00
``` sql
2021-03-13 18:18:45 +00:00
SELECT JSONExtractKeysAndValues('{"x": {"a": 5, "b": 7, "c": 11}}', 'x', 'Int8') = [('a',5),('b',7),('c',11)];
2019-05-13 13:46:19 +00:00
```
2021-11-06 20:58:50 +00:00
## JSONExtractKeys {#jsonextractkeysjson-indices-or-keys}
2021-11-02 17:01:49 +00:00
2021-11-06 20:58:06 +00:00
Parses a JSON string and extracts the keys.
2021-11-02 17:01:49 +00:00
**Syntax**
``` sql
2021-11-06 20:58:15 +00:00
JSONExtractKeys(json[, a, b, c...])
2021-11-02 17:01:49 +00:00
```
**Arguments**
- `json` — [String ](../../sql-reference/data-types/string.md ) with valid JSON.
2021-11-06 20:59:32 +00:00
- `a, b, c...` — Comma-separated indices or keys that specify the path to the inner field in a nested JSON object. Each argument can be either a [String ](../../sql-reference/data-types/string.md ) to get the field by the key or an [Integer ](../../sql-reference/data-types/int-uint.md ) to get the N-th field (indexed from 1, negative integers count from the end). If not set, the whole JSON is parsed as the top-level object. Optional parameter.
2021-11-02 17:01:49 +00:00
**Returned value**
2021-11-06 20:58:24 +00:00
Array with the keys of the JSON.
2021-11-02 17:01:49 +00:00
2021-11-06 20:58:36 +00:00
Type: [Array ](../../sql-reference/data-types/array.md )([String](../../sql-reference/data-types/string.md)).
2021-11-02 17:01:49 +00:00
**Example**
Query:
```sql
SELECT JSONExtractKeys('{"a": "hello", "b": [-100, 200.0, 300]}');
```
Result:
```
text
┌─JSONExtractKeys('{"a": "hello", "b": [-100, 200.0, 300]}')─┐
│ ['a','b'] │
└────────────────────────────────────────────────────────────┘
```
2020-10-13 17:23:29 +00:00
## JSONExtractRaw(json\[, indices_or_keys\]…) {#jsonextractrawjson-indices-or-keys}
2019-05-16 13:35:31 +00:00
2020-04-20 10:08:39 +00:00
Returns a part of JSON as unparsed string.
2019-05-16 13:35:31 +00:00
If the part does not exist or has a wrong type, an empty string will be returned.
Example:
2020-03-20 10:10:48 +00:00
``` sql
2021-03-13 18:18:45 +00:00
SELECT JSONExtractRaw('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = '[-100, 200.0, 300]';
2019-05-16 13:35:31 +00:00
```
2019-06-05 10:04:00 +00:00
2020-10-13 17:23:29 +00:00
## JSONExtractArrayRaw(json\[, indices_or_keys…\]) {#jsonextractarrayrawjson-indices-or-keys}
2019-12-08 14:49:26 +00:00
2019-12-08 20:50:00 +00:00
Returns an array with elements of JSON array, each represented as unparsed string.
2019-12-08 14:49:26 +00:00
2020-03-20 10:10:48 +00:00
If the part does not exist or isn’ t array, an empty array will be returned.
2019-12-08 14:49:26 +00:00
Example:
2020-03-20 10:10:48 +00:00
``` sql
2021-11-25 21:20:37 +00:00
SELECT JSONExtractArrayRaw('{"a": "hello", "b": [-100, 200.0, "hello"]}', 'b') = ['-100', '200.0', '"hello"'];
2019-12-08 14:49:26 +00:00
```
2020-05-07 18:38:27 +00:00
## JSONExtractKeysAndValuesRaw {#json-extract-keys-and-values-raw}
2020-04-20 10:08:39 +00:00
2020-05-07 18:38:27 +00:00
Extracts raw data from a JSON object.
2020-04-20 10:08:39 +00:00
2020-05-07 18:38:27 +00:00
**Syntax**
2020-04-20 10:08:39 +00:00
2020-05-07 18:38:27 +00:00
``` sql
JSONExtractKeysAndValuesRaw(json[, p, a, t, h])
```
2021-02-15 21:22:10 +00:00
**Arguments**
2020-05-07 18:38:27 +00:00
2020-06-18 08:24:31 +00:00
- `json` — [String ](../../sql-reference/data-types/string.md ) with valid JSON.
- `p, a, t, h` — Comma-separated indices or keys that specify the path to the inner field in a nested JSON object. Each argument can be either a [string ](../../sql-reference/data-types/string.md ) to get the field by the key or an [integer ](../../sql-reference/data-types/int-uint.md ) to get the N-th field (indexed from 1, negative integers count from the end). If not set, the whole JSON is parsed as the top-level object. Optional parameter.
2020-05-07 18:38:27 +00:00
**Returned values**
2020-06-18 08:24:31 +00:00
- Array with `('key', 'value')` tuples. Both tuple members are strings.
- Empty array if the requested object does not exist, or input JSON is invalid.
2020-05-07 18:38:27 +00:00
2020-06-18 08:24:31 +00:00
Type: [Array ](../../sql-reference/data-types/array.md )([Tuple](../../sql-reference/data-types/tuple.md)([String](../../sql-reference/data-types/string.md), [String ](../../sql-reference/data-types/string.md )).
2020-05-07 18:38:27 +00:00
**Examples**
Query:
2020-04-20 10:08:39 +00:00
``` sql
2021-03-13 18:18:45 +00:00
SELECT JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b":{"c": {"d": "hello", "f": "world"}}}');
2020-05-07 18:38:27 +00:00
```
Result:
``` text
┌─JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b":{"c": {"d": "hello", "f": "world"}}}')─┐
│ [('a','[-100,200]'),('b','{"c":{"d":"hello","f":"world"}}')] │
└──────────────────────────────────────────────────────────────────────────────────────────────┘
2020-04-20 10:08:39 +00:00
```
2020-05-07 18:38:27 +00:00
Query:
``` sql
2021-03-13 18:18:45 +00:00
SELECT JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b":{"c": {"d": "hello", "f": "world"}}}', 'b');
2020-05-07 18:38:27 +00:00
```
Result:
``` text
┌─JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b":{"c": {"d": "hello", "f": "world"}}}', 'b')─┐
│ [('c','{"d":"hello","f":"world"}')] │
└───────────────────────────────────────────────────────────────────────────────────────────────────┘
```
Query:
``` sql
2021-03-13 18:18:45 +00:00
SELECT JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b":{"c": {"d": "hello", "f": "world"}}}', -1, 'c');
2020-05-07 18:38:27 +00:00
```
Result:
``` text
┌─JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b":{"c": {"d": "hello", "f": "world"}}}', -1, 'c')─┐
│ [('d','"hello"'),('f','"world"')] │
└───────────────────────────────────────────────────────────────────────────────────────────────────────┘
```
2021-10-21 13:39:10 +00:00
## JSON_EXISTS(json, path) {#json-exists}
If the value exists in the JSON document, `1` will be returned.
If the value does not exist, `0` will be returned.
Examples:
``` sql
2021-10-23 16:04:29 +00:00
SELECT JSON_EXISTS('{"hello":1}', '$.hello');
SELECT JSON_EXISTS('{"hello":{"world":1}}', '$.hello.world');
SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[*]');
SELECT JSON_EXISTS('{"hello":["world"]}', '$.hello[0]');
2021-10-21 13:39:10 +00:00
```
!!! note "Note"
before version 21.11 the order of arguments was wrong, i.e. JSON_EXISTS(path, json)
## JSON_QUERY(json, path) {#json-query}
2021-10-23 16:04:29 +00:00
Parses a JSON and extract a value as JSON array or JSON object.
2021-10-21 13:39:10 +00:00
If the value does not exist, an empty string will be returned.
Example:
``` sql
2021-10-23 16:04:29 +00:00
SELECT JSON_QUERY('{"hello":"world"}', '$.hello');
SELECT JSON_QUERY('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]');
SELECT JSON_QUERY('{"hello":2}', '$.hello');
SELECT toTypeName(JSON_QUERY('{"hello":2}', '$.hello'));
2021-10-21 13:39:10 +00:00
```
Result:
``` text
["world"]
[0, 1, 4, 0, -1, -4]
[2]
String
```
!!! note "Note"
before version 21.11 the order of arguments was wrong, i.e. JSON_QUERY(path, json)
## JSON_VALUE(json, path) {#json-value}
2021-10-23 16:04:29 +00:00
Parses a JSON and extract a value as JSON scalar.
2021-10-21 13:39:10 +00:00
If the value does not exist, an empty string will be returned.
Example:
``` sql
2021-10-23 16:04:29 +00:00
SELECT JSON_VALUE('{"hello":"world"}', '$.hello');
SELECT JSON_VALUE('{"array":[[0, 1, 2, 3, 4, 5], [0, -1, -2, -3, -4, -5]]}', '$.array[*][0 to 2, 4]');
SELECT JSON_VALUE('{"hello":2}', '$.hello');
SELECT toTypeName(JSON_VALUE('{"hello":2}', '$.hello'));
2021-10-21 13:39:10 +00:00
```
Result:
``` text
"world"
0
2
String
```
!!! note "Note"
before version 21.11 the order of arguments was wrong, i.e. JSON_VALUE(path, json)
2021-07-01 20:57:01 +00:00
## toJSONString {#tojsonstring}
2021-07-06 21:01:45 +00:00
Serializes a value to its JSON representation. Various data types and nested structures are supported.
2021-07-08 20:18:56 +00:00
64-bit [integers ](../../sql-reference/data-types/int-uint.md ) or bigger (like `UInt64` or `Int128` ) are enclosed in quotes by default. [output_format_json_quote_64bit_integers ](../../operations/settings/settings.md#session_settings-output_format_json_quote_64bit_integers ) controls this behavior.
2021-07-10 07:01:34 +00:00
Special values `NaN` and `inf` are replaced with `null` . Enable [output_format_json_quote_denormals ](../../operations/settings/settings.md#settings-output_format_json_quote_denormals ) setting to show them.
2021-07-08 20:18:56 +00:00
When serializing an [Enum ](../../sql-reference/data-types/enum.md ) value, the function outputs its name.
2021-07-01 20:57:01 +00:00
**Syntax**
``` sql
toJSONString(value)
```
**Arguments**
2021-07-07 19:30:02 +00:00
- `value` — Value to serialize. Value may be of any data type.
2021-07-01 20:57:01 +00:00
**Returned value**
2021-07-29 15:20:55 +00:00
- JSON representation of the value.
2021-07-01 20:57:01 +00:00
2021-07-06 20:49:14 +00:00
Type: [String ](../../sql-reference/data-types/string.md ).
2021-07-01 20:57:01 +00:00
**Example**
2021-07-10 07:01:34 +00:00
The first example shows serialization of a [Map ](../../sql-reference/data-types/map.md ).
The second example shows some special values wrapped into a [Tuple ](../../sql-reference/data-types/tuple.md ).
2021-07-06 20:49:14 +00:00
2021-07-01 20:57:01 +00:00
Query:
``` sql
2021-07-06 20:49:14 +00:00
SELECT toJSONString(map('key1', 1, 'key2', 2));
2021-07-10 07:01:34 +00:00
SELECT toJSONString(tuple(1.25, NULL, NaN, +inf, -inf, [])) SETTINGS output_format_json_quote_denormals = 1;
2021-07-01 20:57:01 +00:00
```
Result:
``` text
2021-07-06 20:49:14 +00:00
{"key1":1,"key2":2}
2021-07-10 07:01:34 +00:00
[1.25,null,"nan","inf","-inf",[]]
2021-07-01 20:57:01 +00:00
```
2021-07-08 20:18:56 +00:00
**See Also**
- [output_format_json_quote_64bit_integers ](../../operations/settings/settings.md#session_settings-output_format_json_quote_64bit_integers )
- [output_format_json_quote_denormals ](../../operations/settings/settings.md#settings-output_format_json_quote_denormals )