sql >> Database teknologi >  >> RDS >> Mysql

JSON_ARRAY_APPEND() – Tilføj værdier til et JSON-array i MySQL

Når du bruger JSON-dokumenter med MySQL, kan du bruge JSON_ARRAY_APPEND() funktion til at tilføje nye værdier til en matrix.

Måden det fungerer på er, at du angiver JSON-dokumentet som det første argument, og derefter følger det op med stien, der skal tilføjes, efterfulgt af værdien, der skal tilføjes.

I MySQL 5.7 blev denne funktion kaldt JSON_APPEND() men det navn er ikke længere understøttet.

Syntaks

Syntaksen ser sådan ud:

JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)

Hvor:

  • json_doc er JSON-dokumentet.
  • path er stien til det element, som den nye værdi skal føjes til.
  • val er den nye værdi, der vil blive tilføjet.

Sti-værdi-parrene evalueres fra venstre mod højre. Dokumentet fremstillet ved at evaluere et par bliver den nye værdi, som det næste par evalueres i forhold til.

Eksempel 1 – Grundlæggende brug

Her er et eksempel til at demonstrere.

SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$', 4) AS 'Result';

Resultat:

+--------------+
| Result       |
+--------------+
| [1, 2, 3, 4] |
+--------------+

Så det 3. argument er tilføjet til arrayet. I dette tilfælde bruger jeg $ for stien. Dette er et synonym for JSON-dokumentet, så værdien tilføjes til arrayet på øverste niveau (som i dette tilfælde tilfældigvis er det eneste array).

Eksempel 2 – Nested Array

Her er et eksempel på tilføjelse af en værdi til en matrix, der er indlejret i en anden matrix.

SELECT JSON_ARRAY_APPEND('[1, 2, [3, 4]]', '$[2]', 5) AS 'Result';

Resultat:

+-------------------+
| Result            |
+-------------------+
| [1, 2, [3, 4, 5]] |
+-------------------+

Så her bruger jeg $[2] som stien. Dette specificerer arrayet ved det tredje element (arrays bruger nul-baseret nummerering, så optællingen starter ved nul).

Hvis der ikke allerede var et array ved det element, oprettes et nyt array.

Sådan:

SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$[2]', 4) AS 'Result';

Resultat:

+----------------+
| Result         |
+----------------+
| [1, 2, [3, 4]] |
+----------------+

Eksempel 3 – Et større JSON-dokument

Dette eksempel bruger et (lidt) større JSON-dokument. Dette viser, hvordan stien ændres afhængigt af, hvor arrayet er i dokumentet.

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies', "Base Jumping") AS 'Result';

Resultat:

+----------------------------------------------------------------------------------+
| Result                                                                           |
+----------------------------------------------------------------------------------+
| {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} |
+----------------------------------------------------------------------------------+

Og ligesom i det foregående eksempel kan vi også oprette en ny, indlejret matrix, hvis det kræves:

SET @data = '{  
    "Person": {    
       "Name": "Homer", 
       "Hobbies": ["Eating", "Sleeping"]  
    }
 }';
SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies[0]', "Drinking") AS 'Result';

Resultat:

+--------------------------------------------------------------------------------+
| Result                                                                         |
+--------------------------------------------------------------------------------+
| {"Person": {"Name": "Homer", "Hobbies": [["Eating", "Drinking"], "Sleeping"]}} |
+--------------------------------------------------------------------------------+


  1. Databasedesign:ét stort bord eller separate tabeller?

  2. Hvordan opdaterer man valgte rækker med værdier fra en CSV-fil i Postgres?

  3. Sådan konfigureres MariaDB 10.3-replikering ved hjælp af Ansible og Vagrant

  4. Hvorfor udfører PostgreSQL sekventiel scanning på indekseret kolonne?