Как я могу использовать MariaDB для извлечения значений из нескольких объектов из массива JSON? - PullRequest
0 голосов
/ 20 ноября 2018

В MariaDB 10.2.19 у меня есть таблица с именем forms со столбцом template, который всегда содержит массив объектов JSON.Некоторые из этих объектов будут иметь свойства, которые я хочу вернуть: name (должен присутствовать всегда), rule и parameters.Как я могу вернуть только эти три свойства из всего массива, но только для объектов, в которых присутствует rule?

Пример массива (отформатированный для более удобного просмотра):

[{
    "label": "Employed?",
    "class": "select",
    "name": "employed",
    "parameters": "Yes",
    "rule": "in"
},
{
    "label": "Breed of dog?",
    "class": "select",
    "name": "breed",
    "parameters": "spaniel, collie, mix",
    "rule": "in"
},
{
    "label": "Number",
    "class": "text",
    "name": "breed"
}]

1 Ответ

0 голосов
/ 20 ноября 2018

Если вы используете MySQL 8.0.4 или более поздней версии, один способ использует JSON_TABLE:

mysql> SELECT * FROM foo;
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| data                                                                                                                                                                                                                                                                          |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| [{"name": "employed", "rule": "in", "class": "select", "label": "Employed?", "parameters": "Yes"}, {"name": "breed", "rule": "in", "class": "select", "label": "Breed of dog?", "parameters": "spaniel, collie, mix"}, {"name": "breed", "class": "text", "label": "Number"}] |
+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0,00 sec)

mysql> SELECT name, parameters 
         FROM foo,
              JSON_TABLE (
                  foo.data, 
                  "$[*]" COLUMNS (
                      name VARCHAR(100) PATH "$.name",
                      rule VARCHAR(100) PATH "$.rule",
                      parameters VARCHAR(100) PATH "$.parameters")
              ) AS t
       WHERE rule IS NOT NULL;
+----------+----------------------+
| name     | parameters           |
+----------+----------------------+
| employed | Yes                  |
| breed    | spaniel, collie, mix |
+----------+----------------------+
2 rows in set (0,00 sec)

https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...