# Funciones JSON

Las funciones JSON se utilizan para manipular datos de tipo cadena.

# JSONExtractString

Analiza un JSON y extrae una cadena. Si el valor no existe o tiene un tipo incorrecto, se devolverá una cadena vacía. El valor no está escapado. Si el desescapado falla, devuelve una cadena vacía.

JSONExtractString(json[, indices_or_keys])

Ejemplos

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') = ''

# toJSONString

Serializa un valor a su representación JSON. Se admiten varios tipos de datos y estructuras anidadas. Los enteros de 64 bits o más grandes (como UInt64 o Int128) se encierran entre comillas por defecto. Los valores especiales NaN e inf se reemplazan por null. Al serializar un valor Enum, la función muestra su nombre.

toJSONString(value)

Argumentos

  • value - Valor a serializar. El valor puede ser de cualquier tipo de dato.

Valor devuelto

  • Representación JSON del valor.
  • Tipo: Cadena

Ejemplo

SELECT toJSONString(‘a:b’) = "a:b" 
SELECT toJSONString(123456) = 123456
SELECT toJSONString(0x64) = 100

# JSONExtractArrayRaw

Devuelve un array con elementos del array JSON, cada uno representado como una cadena sin analizar. Si la parte no existe o no es un array, se devolverá un array vacío.

JSONExtractArrayRaw(json[, indices_or_keys…])

Ejemplo

SELECT JSONExtractArrayRaw('{"a": "hello", "b": [-100, 200.0, "hello"]}', 'b') = ['-100', '200', '"hello"'];
INSERT INTO ChatArXivSELECT 
            abstract, 
            id, 
            vector, 
            metadata, 
            parseDateTimeBestEffort(JSONExtractString(toJSONString(metadata), 'pubdate')) AS pubdate, 
            JSONExtractString(toJSONString(metadata), 'title') AS title, 
            arrayMap(x->trim(BOTH '"' FROM x), 
            JSONExtractArrayRaw(toJSONString(metadata), 'categories')) AS categories, 
            arrayMap(x->trim(BOTH '"' FROM x), 
            JSONExtractArrayRaw(toJSONString(metadata), 'authors')) AS authors, 
            JSONExtractString(toJSONString(metadata), 'comment') AS comment, 
            JSONExtractString(toJSONString(metadata), 'primary_category') AS primary_category
FROM s3( 'https://myscale-demo.s3.ap-southeast-1.amazonaws.com/chat_arxiv/data.part*.zst', 'JSONEachRow', 'abstract String, id String, vector Array(Float32), metadata Object(''JSON'')', 'zstd' )