Започвайки с версия на SQLite 3.38.0 (издадена на 22 февруари 2022 г.), вече можем да използваме -> и ->> оператори за извличане на подкомпоненти на JSON документи.
Целта на тези оператори е да бъдат съвместими с еквивалентните MySQL и PostgreSQL оператори.
Също така, като се започне от SQLite 3.38.0, функциите на JSON вече са вградени. Следователно вече не е необходимо да използвате -DSQLITE_ENABLE_JSON1 опция по време на компилиране, за да активирате поддръжката на JSON.
Синтаксис
Начинът на работа на тези оператори е следният:
json -> path
json ->> path
Където json е JSON документът и path е пътят, който искаме да извлечем от него.
Така че предоставяме JSON документ отляво на оператора и указваме пътя, който искаме да извлечем, отдясно.
Разликата между тези оператори е следната:
->операторът винаги връща JSON представяне на посочения подкомпонент->>операторът винаги връща SQL представяне на посочения подкомпонент
Пример за -> Оператор
Ето един прост пример, за да демонстрирате как -> оператор работи:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$'; Резултат:
{"name":"Wag","type":"Dog"}
В този случай посочих път на '$' който връща целия документ.
Нека посочим друг път:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> '$.type'; Резултат:
"Dog"
Можем да го направим и така:
SELECT '{ "name" : "Wag", "type" : "Dog" }' -> 'type'; Резултат:
"Dog"
Пример за ->> Оператор
Ето какво се случва, когато използваме ->> вместо това:
SELECT '{ "name" : "Wag", "type" : "Dog" }' ->> '$.type'; Резултат:
Dog
Стойността не е цитирана, както беше преди. Това е защото -> връща JSON представяне на подкомпонента и ->> връща SQL представяне.
->> операторът връща SQL TEXT, INTEGER, REAL или NULL стойност, която представлява избрания подкомпонент, или NULL, ако подкомпонентът не съществува.
Ето пример с масив:
SELECT '{ "scores" : [ 9, 7, 5 ] }' ->> '$.scores[2]'; Резултат:
5
Ако стойността се състои само от масив, можем да направим това:
SELECT '[ 9, 7, 5 ]' ->> '2'; Резултат:
5
Това връща елемента на масива с посочения индекс (в този случай 2).
Масивите са базирани на нула (броенето започва от 0 ), и затова 2 връща третия елемент.