2020-04-15 13:56:49 +00:00
---
machine_translated: true
2020-05-15 04:34:54 +00:00
machine_translated_rev: 72537a2d527c63c07aa5d2361a8829f3895cf2bd
2020-04-15 13:56:49 +00:00
toc_priority: 56
2020-05-15 04:34:54 +00:00
toc_title: "Json ile \xE7al\u0131\u015Fma"
2020-04-15 13:56:49 +00:00
---
2020-05-15 04:34:54 +00:00
# Json ile çalı şmak için fonksiyonlar {#functions-for-working-with-json}
2020-04-15 13:56:49 +00:00
2020-05-15 04:34:54 +00:00
Üye Olarak.Metrica, JSON kullanı cı lar tarafı ndan oturum parametreleri olarak iletilir. Bu JSON ile çalı şmak için bazı özel fonksiyonlar var. (Çoğu durumda, JSONs ek olarak önceden işlenir ve elde edilen değerler işlenmiş biçimlerinde ayrı sütunlara konur .) Tüm bu işlevler, JSON'UN ne olabileceğine dair güçlü varsayı mlara dayanı r, ancak işi yapmak için mümkün olduğunca az şey yapmaya çalı şı rlar.
2020-04-15 13:56:49 +00:00
Aşağı daki varsayı mlar yapı lı r:
1. Alan adı (işlev bağı msı z değişkeni) sabit olmalı dı r.
2020-05-15 04:34:54 +00:00
2. Alan adı bir şekilde json'da kanonik olarak kodlanmı ştı r. Mesela: `visitParamHas('{"abc":"def"}', 'abc') = 1` , ama `visitParamHas('{"\\u0061\\u0062\\u0063":"def"}', 'abc') = 0`
2020-04-15 13:56:49 +00:00
3. Alanlar, herhangi bir yuvalama düzeyinde, ayrı m gözetmeksizin aranı r. Birden çok eşleşen alan varsa, ilk olay kullanı lı r.
4. JSON, dize değişmezleri dı şı nda boşluk karakterlerine sahip değildir.
## visitParamHas (params, isim) {#visitparamhasparams-name}
İle bir alan olup olmadı ğı nı denetler ‘ name’ ad.
## visitParamExtractUİnt (params, isim) {#visitparamextractuintparams-name}
Uint64 adlı alanı n değerinden ayrı ştı rı r ‘ name’ . Bu bir dize alanı ise, dizenin başlangı cı ndan itibaren bir sayı yı ayrı ştı rmaya çalı şı r. Alan yoksa veya varsa ancak bir sayı içermiyorsa, 0 döndürür.
## visitParamExtractİnt (params, isim) {#visitparamextractintparams-name}
Int64 için olduğu gibi.
## visitParamExtractFloat (params, isim) {#visitparamextractfloatparams-name}
Float64 için olduğu gibi.
## visitParamExtractBool (params, isim) {#visitparamextractboolparams-name}
True/false değerini ayrı ştı rı r. Sonuç Uİnt8.
## visitParamExtractRaw (params, isim) {#visitparamextractrawparams-name}
Ayı rı cı lar da dahil olmak üzere bir alanı n değerini döndürür.
Örnekler:
``` sql
visitParamExtractRaw('{"abc":"\\n\\u0000"}', 'abc') = '"\\n\\u0000"'
visitParamExtractRaw('{"abc":{"def":[1,2,3]}}', 'abc') = '{"def":[1,2,3]}'
```
## visitParamExtractString (params, isim) {#visitparamextractstringparams-name}
Dizeyi çift tı rnak içinde ayrı ştı rı r. Değeri unescaped. Unescaping başarı sı z olursa, boş bir dize döndürür.
Örnekler:
``` sql
visitParamExtractString('{"abc":"\\n\\u0000"}', 'abc') = '\n\0'
visitParamExtractString('{"abc":"\\u263a"}', 'abc') = '☺'
visitParamExtractString('{"abc":"\\u263"}', 'abc') = ''
visitParamExtractString('{"abc":"hello}', 'abc') = ''
```
2020-05-15 04:34:54 +00:00
Şu anda biçimdeki kod noktaları için destek yok `\uXXXX\uYYYY` bu temel çok dilli düzlemden değildir(UTF-8 yerine CESU-8'e dönüştürülürler).
2020-04-15 13:56:49 +00:00
Aşağı daki işlevler dayanmaktadı r [simdjson ](https://github.com/lemire/simdjson ) daha karmaşı k json ayrı ştı rma gereksinimleri için tasarlanmı ştı r. Yukarı da belirtilen varsayı m 2 hala geçerlidir.
## ı svalidjson(json) {#isvalidjsonjson}
2020-05-15 04:34:54 +00:00
Dize geçirilen kontroller geçerli bir json'dur.
2020-04-15 13:56:49 +00:00
Örnekler:
``` sql
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}
2020-04-15 13:56:49 +00:00
Değer JSON belgesinde varsa, `1` iade edilecektir.
Değer yoksa, `0` iade edilecektir.
Örnekler:
``` sql
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 1
SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 4) = 0
```
`indices_or_keys` sı fı r veya daha fazla argüman listesi her biri dize veya tamsayı olabilir.
- String = nesne üyesine anahtarla erişin.
- Pozitif tamsayı = n-inci üyesine / anahtarı na baştan erişin.
- Negatif tamsayı = sondan n-inci üye/anahtara erişin.
2020-05-15 04:34:54 +00:00
Elemanı n minimum Endeksi 1'dir. Böylece 0 öğesi mevcut değildir.
2020-04-15 13:56:49 +00:00
Hem json dizilerine hem de JSON nesnelerine erişmek için tamsayı lar kullanabilirsiniz.
Bu yüzden, örneğin :
``` sql
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'
```
2020-10-13 17:23:29 +00:00
## JSONLength(json\[, indices_or_keys\]…) {#jsonlengthjson-indices-or-keys}
2020-04-15 13:56:49 +00:00
Bir json dizisinin veya bir JSON nesnesinin uzunluğunu döndürür.
Değer yoksa veya yanlı ş bir türe sahipse, `0` iade edilecektir.
Örnekler:
``` sql
SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 3
SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}') = 2
```
2020-10-13 17:23:29 +00:00
## JSONType(json\[, indices_or_keys\]…) {#jsontypejson-indices-or-keys}
2020-04-15 13:56:49 +00:00
Bir JSON değerinin türünü döndürür.
Değer yoksa, `Null` iade edilecektir.
Örnekler:
``` sql
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'
```
2020-10-13 17:23:29 +00:00
## JSONExtractUInt(json\[, indices_or_keys\]…) {#jsonextractuintjson-indices-or-keys}
2020-04-15 13:56:49 +00:00
2020-10-13 17:23:29 +00:00
## JSONExtractInt(json\[, indices_or_keys\]…) {#jsonextractintjson-indices-or-keys}
2020-04-15 13:56:49 +00:00
2020-10-13 17:23:29 +00:00
## JSONExtractFloat(json\[, indices_or_keys\]…) {#jsonextractfloatjson-indices-or-keys}
2020-04-15 13:56:49 +00:00
2020-10-13 17:23:29 +00:00
## JSONExtractBool(json\[, indices_or_keys\]…) {#jsonextractbooljson-indices-or-keys}
2020-04-15 13:56:49 +00:00
Bir JSON ayrı ştı rı r ve bir değer ayı klayı n. Bu işlevler benzer `visitParam` işlevler.
Değer yoksa veya yanlı ş bir türe sahipse, `0` iade edilecektir.
Örnekler:
``` sql
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
```
2020-10-13 17:23:29 +00:00
## JSONExtractString(json\[, indices_or_keys\]…) {#jsonextractstringjson-indices-or-keys}
2020-04-15 13:56:49 +00:00
Bir json ayrı ştı rı r ve bir dize ayı klayı n. Bu işlev benzer `visitParamExtractString` işlevler.
Değer yoksa veya yanlı ş bir tür varsa, boş bir dize döndürülür.
Değeri unescaped. Unescaping başarı sı z olursa, boş bir dize döndürür.
Örnekler:
``` sql
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') = ''
```
2020-10-13 17:23:29 +00:00
## JSONExtract(json\[, indices_or_keys…\], Return_type) {#jsonextractjson-indices-or-keys-return-type}
2020-04-15 13:56:49 +00:00
Bir Json ayrı ştı rı r ve verilen ClickHouse veri türünün bir değerini çı karı r.
Bu, önceki bir genellemedir `JSONExtract<type>` işlevler.
Bu demektir
`JSONExtract(..., 'String')` tam olarak aynı döndürür `JSONExtractString()` ,
`JSONExtract(..., 'Float64')` tam olarak aynı döndürür `JSONExtractFloat()` .
Örnekler:
``` sql
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}
2020-04-15 13:56:49 +00:00
2020-05-15 04:34:54 +00:00
Anahtar değer çiftlerini, değerlerin verilen ClickHouse veri türünde olduğu bir JSON'DAN ayrı ştı rı r.
2020-04-15 13:56:49 +00:00
Örnek:
``` sql
2020-05-15 04:34:54 +00:00
SELECT JSONExtractKeysAndValues('{"x": {"a": 5, "b": 7, "c": 11}}', 'x', 'Int8') = [('a',5),('b',7),('c',11)]
2020-04-15 13:56:49 +00:00
```
2020-10-13 17:23:29 +00:00
## JSONExtractRaw(json\[, indices_or_keys\]…) {#jsonextractrawjson-indices-or-keys}
2020-04-15 13:56:49 +00:00
2020-05-15 04:34:54 +00:00
Json'un bir bölümünü ayrı ştı rı lmamı ş dize olarak döndürür.
2020-04-15 13:56:49 +00:00
Bölüm yoksa veya yanlı ş bir türe sahipse, boş bir dize döndürülür.
Örnek:
``` sql
SELECT JSONExtractRaw('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = '[-100, 200.0, 300]'
```
2020-10-13 17:23:29 +00:00
## JSONExtractArrayRaw(json\[, indices_or_keys…\]) {#jsonextractarrayrawjson-indices-or-keys}
2020-04-15 13:56:49 +00:00
Her biri ayrı ştı rı lmamı ş dize olarak temsil edilen json dizisinin öğeleriyle bir dizi döndürür.
Bölüm yoksa veya dizi değilse, boş bir dizi döndürülür.
Örnek:
``` sql
SELECT JSONExtractArrayRaw('{"a": "hello", "b": [-100, 200.0, "hello"]}', 'b') = ['-100', '200.0', '"hello"']'
```
2020-05-15 04:34:54 +00:00
## JSONExtractKeysAndValuesRaw {#json-extract-keys-and-values-raw}
Bir json nesnesinden ham verileri ayı klar.
**Sözdizimi**
``` sql
JSONExtractKeysAndValuesRaw(json[, p, a, t, h])
```
**Parametre**
- `json` — [Dize ](../data-types/string.md ) geçerli JSON ile.
- `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 [dize ](../data-types/string.md ) anahtar veya bir tarafı ndan alan almak için [tamsayı ](../data-types/int-uint.md ) N-inci alanı nı almak için (1'den endeksli, negatif tamsayı lar sondan sayı lı r). Ayarlanmazsa, tüm JSON üst düzey nesne olarak ayrı ştı rı lı r. İsteğe bağlı parametre.
**Döndürülen değerler**
- İle dizi `('key', 'value')` Demetler. Her iki tuple üyeleri dizeleri vardı r.
- İstenen nesne yoksa veya giriş json geçersiz ise boş dizi.
Tür: [Dizi ](../data-types/array.md )([Demet](../data-types/tuple.md)([Dize](../data-types/string.md), [Dize ](../data-types/string.md )).
**Örnekler**
Sorgu:
``` sql
SELECT JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b":{"c": {"d": "hello", "f": "world"}}}')
```
Sonuç:
``` text
┌─JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b":{"c": {"d": "hello", "f": "world"}}}')─┐
│ [('a','[-100,200]'),('b','{"c":{"d":"hello","f":"world"}}')] │
└──────────────────────────────────────────────────────────────────────────────────────────────┘
```
Sorgu:
``` sql
SELECT JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b":{"c": {"d": "hello", "f": "world"}}}', 'b')
```
Sonuç:
``` text
┌─JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b":{"c": {"d": "hello", "f": "world"}}}', 'b')─┐
│ [('c','{"d":"hello","f":"world"}')] │
└───────────────────────────────────────────────────────────────────────────────────────────────────┘
```
Sorgu:
``` sql
SELECT JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b":{"c": {"d": "hello", "f": "world"}}}', -1, 'c')
```
Sonuç:
``` text
┌─JSONExtractKeysAndValuesRaw('{"a": [-100, 200.0], "b":{"c": {"d": "hello", "f": "world"}}}', -1, 'c')─┐
│ [('d','"hello"'),('f','"world"')] │
└───────────────────────────────────────────────────────────────────────────────────────────────────────┘
```
2020-04-15 13:56:49 +00:00
[Orijinal makale ](https://clickhouse.tech/docs/en/query_language/functions/json_functions/ ) <!--hide-->