SQLite
 sql >> база данни >  >> RDS >> SQLite

3 начина за извличане на стойност от JSON документ в SQLite

Когато използваме SQLite, можем да използваме следните методи за извличане на данни от JSON документ.

json_extract() Функция

Както подсказва името му, json_extract() функцията извлича и връща една или повече стойности от добре оформен JSON.

Пример:

SELECT json_extract('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.dogs[1]'
);

Резултат:

{"name":"Bark","scores":[3,4,8,7]}

Масивите са базирани на нула и така броят започва от 0 . Затова посочихме [1] за да получите втория елемент в dogs масив, който се оказва JSON обект.

Можем да върнем само името на кучето на тази позиция в масива, като добавим към нашия път:

SELECT json_extract('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.dogs[1].name'
);

Резултат:

Bark

Можем да използваме json_extract() за връщане на няколко пътя:

SELECT json_extract('{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}', 
'$.dogs[0].name',
'$.dogs[1].name',
'$.dogs[2].name'
);

Резултат:

["Wag","Bark","Woof"]

Когато извличаме стойности от множество пътища, стойностите се връщат в масив.

-> Оператор

-> оператор извлича подкомпонент от JSON документ и връща JSON представяне на този подкомпонент.

Следователно можем да променим първия пример на този:

SELECT '{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}' -> '$.dogs[1]';

Резултат:

{"name":"Bark","scores":[3,4,8,7]}

-> операторът е малко различен от json_extract() функция:

  • -> операторът винаги връща JSON представяне на подкомпонента.
  • json_extract() функцията връща JSON само ако има два или повече аргумента на пътя (тъй като резултатът е JSON масив) или ако единичният аргумент за път препраща към масив или обект.
  • Ако има само един аргумент за път и този път препраща към JSON нула, низ или числова стойност, тогава json_extract() връща съответната SQL стойност NULL, TEXT, INTEGER или REAL.

Ето защо, ето какво се случва, когато извлечем името на куче от нашия JSON:

SELECT '{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}' -> '$.dogs[1].name';

Резултат:

"Bark"

Този път е заобиколен от кавички. Това е така, защото връща JSON представяне на стойността. Когато извлечехме същата стойност с json_extract() преди това получихме SQL представяне на стойността.

Можем обаче да използваме и ->> оператор за връщане на SQL представяне.

->> Оператор

->> операторът работи по същия начин като -> оператор, с изключение на ->> връща SQL представяне на посочения подкомпонент. По-конкретно, той връща SQL TEXT , INTEGER , REAL или NULL стойност, която представлява избрания подкомпонент, или NULL ако подкомпонентът не съществува.

Ето защо, ето какво се случва, когато използваме ->> оператор за извличане на името на кучето:

SELECT '{
    "dogs" : [
            { "name" : "Wag", "scores" : [ 7, 9 ] },
            { "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
            { "name" : "Woof", "scores" : [ 3, 2, 1 ] }
    ]
}' ->> '$.dogs[1].name';

Резултат:

Bark

Вече не е затворено в кавички.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite команди

  2. Експортирайте база данни SQLite в XML файл

  3. Android Room:Как да мигрираме преименуването на колона?

  4. Каква е границата на SQL променливите, които човек може да посочи в единична execSQL заявка

  5. Регистрирайте времето на заявка в SQLite на Android