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

SQLite JSON_SET()

SQLite json_set() функцията ни позволява да вмъкнем или заменим стойност в JSON документ.

Предаваме оригиналния JSON като първи аргумент, когато извикаме функцията, последван от път, който указва къде да се вмъкне/замени новата стойност, последван от стойността за вмъкване/замяна.

Можем също да вмъкнем/заменим няколко двойки ключ/стойност, ако е необходимо.

Синтаксис

Работи така:

json_set(json, path1, value1, path2, value2...)

Където json представлява оригиналния JSON и path1, value1, path2, value2... са двойки път/стойност, които можем да използваме за вмъкване на нови стойности в JSON документа (или замяна, според случая).

Пример

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

SELECT json_set('{ "a" : 1 }', '$.b', 2);

Резултат:

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

Тук вмъкнах нова двойка ключ/стойност ("b":2 ) в документа JSON.

Можем да вмъкнем няколко двойки ключ/стойност, както следва:

SELECT json_set('{ "a" : 1 }', '$.b', 2, '$.c', 3 );

Резултат:

{"a":1,"b":2,"c":3}

Просто добавих още аргументи ключ/стойност, когато извиках json_set() .

Замяна на стойности

Ако ключът вече съществува, неговата стойност се заменя с новата стойност:

SELECT json_set('{ "a" : 1, "b" : 2 }', '$.b', 3);

Резултат:

{"a":1,"b":3}

Това е основната разлика между json_set() и json_insert() . json_insert() функцията няма да вмъкне стойността, ако ключът вече съществува.

Друг начин за замяна на стойности е да използвате json_replace() .

Вмъкване на обект

Ето пример за вмъкване на JSON обект:

SELECT json_set('{ "a" : 1 }', '$.b', json('{ "c" : 2 }') );

Резултат:

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

В този случай използвах json() функция, за да върне аргумента ми като JSON низ. Ето какво се случва, когато не го направя:

SELECT json_set('{ "a" : 1 }', '$.b', '{ "c" : 2 }' );

Резултат:

{"a":1,"b":"{ \"c\" : 2 }"}

JSON документът се вмъква като текстова стойност вместо JSON обект и следователно неговите двойни кавички се екранират с обратна наклонена черта.

Въпреки това, простото премахване на единичните кавички води до грешка:

SELECT json_set('{ "a" : 1 }', '$.b', { "c" : 2 } );

Резултат:

Parse error: unrecognized token: "{"
  SELECT json_set('{ "a" : 1 }', '$.b', { "c" : 2 } );
                          error here ---^

Без единични кавички или json() функция, получаваме грешка веднага щом срещне лявата фигурна скоба.

Друг начин да вмъкнете JSON обект е да използвате json_object() функция вместо json() функция:

SELECT json_set('{ "a" : 1 }', '$.b', json_object('c', 2) );

Резултат:

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

Вмъкване на масив

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

SELECT json_set('{ "a" : 1 }', '$.b', json('[ 2, 3, 4 ]'));

Резултат:

{"a":1,"b":[2,3,4]}

Ако премахнем json() функция, получаваме това:

SELECT json_set('{ "a" : 1 }', '$.b', '[ 2, 3, 4 ]');

Резултат:

{"a":1,"b":"[ 2, 3, 4 ]"}

И ако премахнем единичните кавички, получаваме грешка:

SELECT json_set('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]);

Резултат:

Parse error: no such column:  2, 3, 4 
  SELECT json_set('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]);
                          error here ---^

Като алтернатива можем да използваме json_array() функция вместо json() . Тази функция ви позволява да създадете масив въз основа на неговите аргументи:

SELECT json_set('{ "a" : 1 }', '$.b', json_array( 2, 3, 4 ) );

Резултат:

{"a":1,"b":[2,3,4]}

Добавяне на стойности в края на масив

Можем да използваме json_set() за добавяне на стойности в края на масив.

За да направите това, използвайте индекс на масив от [#] :

SELECT json_set('[ 1, 2, 3 ]', '$[#]', 4 );

Резултат:

[1,2,3,4]

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

SELECT json_set('[ 1, [ "a", "b" ], 3 ]', '$[1][#]', "c" );

Резултат:

[1,["a","b","c"],3]

Замяна на елементи на масив

Можем да използваме json_set() за замяна на елементи в масива:

SELECT json_set('[ 1, 2, 3 ]', '$[1]', 4 );

Резултат:

[1,4,3]

Масивите са базирани на нула и така [1] обозначава втория елемент от масива.

json_replace() функцията може да се използва и за замяна на съществуващи елементи. Отново, това е различно от json_insert() , което не замества съществуващите елементи.

Невалидни пътища

Ще получим грешка, ако пътят ни не е добре оформен:

SELECT json_set('{ "a" : 1 }', 'b', 2);

Резултат:

Runtime error: JSON path error near 'b'

В този случай забравих да включа $. в предната част на пътеката.

Невалидни JSON документи

Ще получим и грешка, че JSON не е добре оформен:

SELECT json_set('{ "a" : 1', '$.b', 2);

Резултат:

Runtime error: malformed JSON

Този път грешката ни казва, че нашият JSON е неправилно оформен.


  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 Изберете Distinct

  2. пагинация в списъка

  3. SQLite Поръчайте по

  4. SQLiteException, използващ WHERE +KEY_Date+='+date+'

  5. SQLite - Създаване на връзка