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

SQLite JSON_OBJECT()

SQLite json_object() функцията връща добре оформен JSON обект въз основа на неговите аргументи.

Функцията приема нула или повече двойки аргументи и връща добре оформен JSON обект въз основа на тези аргументи.

Синтаксис

json_object(label1,value1,...) 

Където label1, value2, ... представлява двойките етикет/стойност.

Пример

Ето един прост пример за демонстрация:

SELECT json_object( "name", "Igor", "age", 35 ); 

Резултат:

{"name":"Игор","age":35}

Предаване на JSON обекти

Предаването на аргумент с SQL тип TEXT води до JSON низ в кавички, като всички етикети в кавички са екранирани:

SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' ); 

Резултат:

{"user":"{ \"name\" :\"igor\", \"age\" :35 }"}

Ако не искаме това да се случи, можем да използваме json() функция за предоставяне на стойността като валиден JSON документ:

SELECT json_object( "user", json('{ "name" : "igor", "age" : 35 }') ); 

Резултат:

{"user":{"name":"igor","age":35}}

Друг начин да го направите е да използвате -> на SQLite оператор:

SELECT json_object( "user", '{ "name" : "igor", "age" : 35 }' -> '$' ); 

Резултат:

{"user":{"name":"igor","age":35}}

Като алтернатива можем да използваме друг json_object() функция:

SELECT json_object( "user", json_object( "name", "Igor", "age", 35 ) ); 

Резултат:

{"user":{"name":"Igor","age":35}}

Ето го с някои други стойности:

SELECT json_object( 
    "a", 1, 
    "user", json_object( "name", "Igor", "age", 35 ), 
    "b", 2 
    ); 

Резултат:

{"a":1,"user":{"name":"Igor","age":35},"b":2}

Предаване на JSON масиви

Подобно нещо е и при предаване на JSON масиви:

SELECT json_object( "scores", '[ 9, 4, 7 ]' ); 

Резултат:

{"резултати":"[ 9, 4, 7 ]"}

В този случай стойността е низ, който прилича на масив.

За да върнем действителен JSON масив, можем да предадем нашия аргумент на json() функция:

SELECT json_object( "scores", json('[ 9, 4, 7 ]') ); 

Резултат:

{"резултати":[9,4,7]}

Можем също да използваме -> оператор:

SELECT json_object( "scores", '[ 9, 4, 7 ]' -> '$' ); 

Резултат:

{"резултати":[9,4,7]}

Като алтернатива можем да предадем стойностите на json_array() функция:

SELECT json_object( "scores", json_array( 9, 4, 7 ) ); 

Резултат:

{"резултати":[9,4,7]}

Ето го с някои други двойки име/стойност:

SELECT json_object( 
    "name", "Bruno", 
    "scores", json_array( 9, 4, 7 ), 
    "age", 25 
    ); 

Резултат:

{"name":"Bruno","cores":[9,4,7],"age":25}

Създайте празен обект

Извикване на json_object() без подаване на аргументи води до празен обект:

SELECT json_object(); 

Резултат:

{}

Дублиращи се етикети

Към момента на писане, json_object() приема дублиращи се етикети без проблем. Следователно можем да правим неща като това:

SELECT json_object( "b", 1, "b", 2 ); 

Резултат:

{"b":1,"b":2}

Но документацията на SQLite съветва, че това може да не винаги е така – бъдещите версии на SQLite може да не поддържат такива сценарии.

Пример за база данни

Можем да използваме json_object() при извличане на данни от база данни.

Да предположим, че изпълняваме следната заявка:

SELECT * FROM Pets; 

Резултат:

<пред>+-------+--------+-------+| PetId | Име на домашни любимци | TypeId |+-------+--------+-------+| 1 | Омир | 3 || 2 | Йелп | 1 || 3 | Пух | 2 || 4 | Четка | 4 |+-------+--------+-------+

Виждаме, че има три колони и можем да видим имената им.

Можем да използваме json_object() функция на тази маса по следния начин:

SELECT json_object( 
    'PetId', PetId, 
    'PetName', PetName,
    'TypeId', TypeId 
    )
FROM Pets; 

Резултат:

{"PetId":1,"PetName":"Homer","TypeId":3}{"PetId":2,"PetName":"Yelp","TypeId":1}{"PetId":3,"PetName":"Fluff","TypeId":2}{"PetId":4,"PetName":"Brush","TypeId":4}

Тук изрично посочих имената на етикетите, след което използвах действителните колони от базата данни за стойностите. Всеки ред става JSON документ, а всяка колона става двойка ключ/стойност в този JSON документ.

Можем също да използваме json_group_array() функция за обвиване на документите в масив:

SELECT json_group_array( 
        json_object(
        'PetId', PetId, 
        'PetName', PetName,
        'TypeId', TypeId 
        )
    )
FROM Pets; 

Резултат:

[{"PetId":1,"PetName":"Homer","TypeId":3},{"PetId":2,"PetName":"Yelp","TypeId":1},{" PetId":3,"PetName":"Fluff","TypeId":2},{"PetId":4,"PetName":"Brush","TypeId":4}]

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване на NoClassDefFoundError, докато се опитвате да използвате Proguard и SQLcipher в Android

  2. Показване на данни от база данни с помощта на базов адаптер и изглед на списък

  3. SQLite JSON_TREE()

  4. Как да активирате поддръжка на чужд ключ в SQLite

  5. SQLite Поръчайте по дата 1530019888000