27 Nisan 2022 Çarşamba

JSON Processing Functions

Giriş
Açıklaması şöyle
There’s a very long list of JSON Processing Functions, including functions (for example) to:
- expand a json array into different data types
- count elements
- extract objects (similar to “#>” and “#>>” operators)
- return the json keys
- set and insert (which replaces or adds path elements)
- path checking (exists, match, query)
- pretty and
- Typeof!
jsonb_typeof metodu
Verinin tipinin  örneğin array olup olmadığını anlamak için kullanılır

Örnek
address sütunu JSONB tipinden olsun ve içindeki veri şöyle olsun
{
"address":[ { "types":["route"], "long_name":"20203 113B Ave", "short_name":"20203 113B Ave" }, { "types":["locality","political"], "long_name":"Maple Ridge", "short_name":"Maple Ridge" }, ... ] }
Şöyle yaparız. İçteki sorguda b.address alanındaki dizi çekiliyor. Ancak dizi olması gerek bazı veri json array değil de jsonb. Bu yüzden önce array olmayan veri eleniyor. Daha sonra dış sorguda address nesnesinin long_name alanının değerine text olarak erişiliyor.
SELECT DISTINCT x.address ->> 'long_name' AS country_name
FROM  (
    SELECT jsonb_array_elements(b.address) AS address
    FROM   brand b
    WHERE  jsonb_typeof(b.address) = 'array'            -- !!!
   ) x
WHERE  x.address ->> 'types' ILIKE ANY (ARRAY['%country%'::text]);

Hiç yorum yok:

Yorum Gönder