2016-09-08 3 views
1

У меня есть столбец в MySQL 5.7 таблицы с типом json данных и следующих значений:MySQL: поиск по атрибутам JSON возвращает ошибку

{"1": "test"} 
{"2": [25,23], "3": [28,54], "71": "test"} 
{"2": [25,12], "3": [28,72], "33": "test2"} 
{"2": [25,11], "3": [28,23], "63": "test3"} 
{"4": "test4"} 

мне нужно запросить все строки с атрибутом «3» (независимо от значения) , так что я делаю этот запрос:

SELECT * FROM `notes` WHERE JSON_CONTAINS(data, '{"2"}'); 

я получаю:

#3141 - Invalid JSON text in argument 2 to function json_contains: "Missing a colon after a name of object member." at position 5. 

Также пробовал:

SELECT data->"$.2" AS myattr FROM `notes`; 
#3143 - Invalid JSON path expression. The error is around character position 3. 

Просьба помочь.

ответ

1

Используйте JSON_CONTAINS_PATH, так как вы не заботитесь о стоимости

SELECT data 
    FROM notes 
WHERE JSON_CONTAINS_PATH(data, 'one', '$."3"'); 

Пример вывода:

 
+-----------------------------------------------+ 
| data           | 
+-----------------------------------------------+ 
| {"2": [25, 23], "3": [28, 54], "71": "test"} | 
| {"2": [25, 12], "3": [28, 72], "33": "test2"} | 
| {"2": [25, 11], "3": [28, 23], "63": "test3"} | 
+-----------------------------------------------+ 
Смежные вопросы