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

Как да върнете елементи от JSON масив в MariaDB

MariaDB включва два селектора, които ни позволяват да избираме елементи от JSON масиви:

  • [N] избира номер на елемент N в масива (например [0] за да изберете първия елемент).
  • [*] избира всички елементи в масива.

Те могат да се използват в редица JSON функции, които са включени в MariaDB. Следните примери ги използват с JSON_EXTRACT() функция, за да върне избраните елементи от масива.

Пример – [N]

Ето един прост пример, за да демонстрирате как да изберете един елемент от масива:

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

Резултат:

+---------------------------------+
| JSON_EXTRACT('[1,2,3]', '$[1]') |
+---------------------------------+
| 2                               |
+---------------------------------+

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

Ето още един пример, този път с помощта на малко по-голям JSON документ:

SET @json = '
    { 
        "_id": 1, 
        "product": "Left Handed Screwdriver", 
        "sizes": [ "S", "M", "L" ] 
    }
';

SELECT JSON_EXTRACT(@json, '$.sizes[1]');

Резултат:

+-----------------------------------+
| JSON_EXTRACT(@json, '$.sizes[1]') |
+-----------------------------------+
| "M"                               |
+-----------------------------------+

В този случай .sizes определя sizes член на обекта и така $.sizes[1] избира втория елемент в sizes масив.

Пример- [*]

[*] селектор избира всички елементи в масива.

Пример:

SET @json = '
    { 
        "_id": 1, 
        "product": "Left Handed Screwdriver", 
        "sizes": [ "S", "M", "L" ] 
    }
';

SELECT JSON_EXTRACT(@json, '$.sizes[*]');

Резултат:

+-----------------------------------+
| JSON_EXTRACT(@json, '$.sizes[*]') |
+-----------------------------------+
| ["S", "M", "L"]                   |
+-----------------------------------+

В този случай резултатът изглежда точно същият като оригиналния масив, в който случай би могъл да бъде върнат само чрез указване на $.sizes .

Селектори за множество масиви

Но ето още един пример, който използва два селектора на масиви.

Първо, използваме селектор за заместващи знаци, за да изберем всички елементи в масива. След това използваме друг селектор на масив, за да изберем само втория елемент в масив, който е вложен в тези елементи:

SET @json = '
{ 
    "products" : 
    [
        { 
            "_id": 1, 
            "product": "Left Handed Screwdriver", 
            "sizes": [ "S", "M", "L" ] 
        },
        { 
            "_id": 2, 
            "product": "Long Weight", 
            "sizes": [ 8, 7, 10 ] 
        },
        { 
            "_id": 3, 
            "product": "Bottomless Coffee Cup", 
            "sizes": [ "Tall", "Grande", "Venti" ] 
        }
    ]
}
';

SELECT JSON_EXTRACT(@json, '$.products[*].sizes[1]');

Резултат:

+-----------------------------------------------+
| JSON_EXTRACT(@json, '$.products[*].sizes[1]') |
+-----------------------------------------------+
| ["M", 7, "Grande"]                            |
+-----------------------------------------------+

Стъпка със заместващ знак

Ако вашият JSON документ съдържа множество масиви с едно и също име, някои от които са вложени на различни нива или в собствен обект, можете да ги изберете всички с помощта на стъпката за заместващ знак (** ). Стъпката за заместващ знак рекурсивно избира всички дъщерни елементи на текущия елемент.

Тук ние го използваме, за да помогнем при изграждането на JSONPath израз, който връща втория елемент на масива от всички масиви, наречени sizes , включително масиви, които са вложени в други документи:

SET @json = '[
    { 
        "_id": 1, 
        "product": { 
            "name" : "Tuxedo", 
            "color" : "Blue",
            "sizes": [ "S", "M", "L" ],
            "accessories" : {
                "belt" : {
                    "color" : "Navy",
                    "sizes" : [ "Wide", "Narrow" ]
                },
                "tie" : {
                    "color" : "Black",
                    "sizes" : [ "Short", "Medium", "Long" ]
                }
            }
        }
    }
]';

SELECT JSON_EXTRACT(@json, '$**.sizes[1]');

Резултат:

+-------------------------------------+
| JSON_EXTRACT(@json, '$**.sizes[1]') |
+-------------------------------------+
| ["M", "Narrow", "Medium"]           |
+-------------------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 8 начина за добавяне на секунди към стойност за дата и час в MariaDB

  2. 2 начина да получите краткото име на месеца от дата в MariaDB

  3. Балансиране на натоварването на базата данни:разпределени срещу централизирани настройки

  4. Подготовка на MySQL или MariaDB сървър за производство - част втора

  5. Как работи SYSDATE() в MariaDB