Започвайки с версия на 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
връща третия елемент.