Json
Düzeltme Öner

JSON

Aşağıdaki operatörler PostgreSQL içinde JSON tipi veriler olan json ve jsonb ile kullanılmaktadır.

Operatör Operatörün sağındaki veri tipi Açıklama Örnek Sonuç
-> int JSON dizisinden eleman alır (0 ilk indeksi, negatif elemanlar sondan geriye indeksleri gösterir) '[{"a":"foo"},{"b":"bar"},{"c":"baz"}]'::json->2 {“c”:”baz”}
-> text JSON objesini key üzerinden alır '{"a": {"b":"foo"}}'::json->'a' {“b”:”foo”}
->> int JSON dizi elemanını text olarak alır '[1,2,3]'::json->>2 3
->> text JSON’ın istenen obje alanını text olarak alır '{"a":1,"b":2}' ::json->>'b' 2
#> text[] JSON objesini alır '{"a": {"b":{"c": "foo"}}}'::json#> '{a,b}' {“c”:”foo”}
#>> text[] JSON objesini text olarak alır '{"a":[1,2,3],"b": [4,5,6]}'::json#>> '{a,2}' 3

PostgreSQL’de kullanılan standart karşılaştırma operatörleri (<, >, <=, => ,= ,<> ve !=) jsonb için çalışırken json veri tiplerinde çalışmaz. Bunun sebebi json tipindeki verilerin B-Tree sıralama operasyonlarına göre dizilmesidir ve büyüklük, küçüklük, eşitlik gibi kıyaslamalara farklı reaksiyon gösterirler.

Yine aşağıdaki operatörler sadece jsonb’de çalışırlar.

Operatör Açıklama Operatör Açıklama
@> jsonb En üst düzeyde, soldaki JSON değeri sağdakini kapsıyor mu? '{"a":1, "b":2}' ::jsonb @> '{"b":2}'::jsonb
<@ jsonb En üst düzeyde, soldaki JSON değeri sağdaki tarafından kapsanıyor mu? '{"b":2}' ::jsonb <@ '{"a":1, "b":2}' ::jsonb
? text String JSON’daki en üst düzeydeki anahtarın değeri mi? '{"a":1, "b":2}' ::jsonb ? 'b'
?| text[] Dizideki stringlerden herhangi birisi en üst düzeydeki anahtar mı? '{"a":1, "b":2, "c":3}’::jsonb ?| array['b', 'c']
?& text[] Dizideki stringlerin tümü en üst düzeydeki anahtar mı? '["a", "b"]' ::jsonb ?& array['a', 'b']
|| jsonb İki jsonb değerini birleştirip tek bir jsonb değeri üretir '["a", "b"]' ::jsonb || '["c", "d"]' ::jsonb
- text Operatörün solunda istenen anahtar:değer çiftini veya string elemanı siler. '{"a": "b"}' ::jsonb - 'a'
- text[] Operatörün solunda istenen bir ya da birkaç anahtar:değer çiftini veya string elemanı siler. '{"a": "b", "c": "d"}'::jsonb - '{a,c}'::text[]
- integer Indeks numarası (konumu) verilen dizi elemanını siler. En üst seviye konteyner, dizi değilse hata döndürür. '["a", "b"]' ::jsonb - 1
#- text[] istenen konumdaki JSON alanını veya elemanını siler. '["a", {"b":1}]' ::jsonb #- '{1,b}'
Tags: PostgreSQL