<aside> 💡 Ushbu qo'llanmada PostgreSQLda JSON ma'lumotlar turi bilan ishlashni va JSON ma'lumotlarni boshqarish uchun ba'zi foydali operatorlar va funksiyalarni bilib olasiz.

</aside>

<aside> 💡 JSON - bu kalit-qiymat juftliklaridan tashkil topgan ochiq standart format

</aside>

     **Keys | Values**
{
		"name": "Sardor",
		"age" : 18,
		"car" : "Tiko"
}

Misollar bilan ko'rsatish uchun yangi jadval hosil qilamiz.

"orders" nomli jadval hosil qilamiz va bitta ustuni tipini "json" qilamiz.
Ushbu ustunda "json" turidagi ma'lumot saqlaymiz. 

CREATE TABLE orders (
	id serial NOT NULL PRIMARY KEY,
	info json NOT NULL
);

Jadvalga ma'lumotlar qo'shamiz

JSON:
{
    "customer": "Sardor Oga",
    "items": {
        "product": "iphone",
        "qty": 1
    }
}

SQL:
INSERT INTO orders (info)
VALUES('{ "customer": "Sardor Oga", "items": {"product": "iphone","qty": 1}}');

Bir nechta ma`lumotni bitta so`rovda qo`shish:
INSERT INTO orders (info)
VALUES('{ "customer": "Toshmat", "items": {"product": "iMac","qty": 1}}'),
      ('{ "customer": "Apandi", "items": {"product": "Eshak","qty": 2}}'),
      ('{ "customer": "Eshmat", "items": {"product": "Chupa-chups","qty": 20}}');

Bazaga SELECT so'rovini berib, kerakli ma'lumotlarni olamiz

SELECT info FROM orders;

PostgreSQLning -> and ->> operatorlari, JSON turidagi ma'lulmotlarni olishda yordam beradi.

"orders" jadvalidan, barcha customerlarni olish so`rovi:

SELECT info ->> 'customer' AS customer
FROM orders;

SELECT info -> 'items' AS customer
FROM orders;

->> - natijani string turida qaytaradi
->  - natijani json obyekt qaytaradi

"orders" jadvalidan barcha order qilingan produktlarning nomlarini olish

SELECT info -> 'items' ->> 'product' as product
FROM orders
ORDER BY product;

Izoh:
info -> 'items' ->> 'product'  - nega aynan bunday ishlatildi?

* info - ustun nomi;
* uning "items" keyli json obyektdan tashkil topgan elementi mavjud;
* info->'items' bu yerda ->> bu operatorni qo`llab bo`lmaydi, 
chunki "items" json obyekt, bizga shu json obyektni ichidagi 
"product" keyli elementini qiymati kerak;
* agar info->>'items'  operator bilan oladigan bo`lsak, bizga string qilib
 qaytaradi, stringni ichidagi "product" ni ajratib bo`lmaydi. 
Shuning uchun -> ishlatiladi

Demka:
Birinchi, info -> 'items' barcha 'items' larni JSON obyekt qilib qaytaradi.
info->'items'->>'product' - barcha produktlarni text ko'rinishida qaytaradi. 

WHERE ichida qanday ishlatiladi?