Как я могу искать данные JSON в MySQL?

0

У меня есть поле описания. Поле json

Содержимое поля описания выглядит следующим образом:

{
    "address": 
    {
        "street": "street 123", 
        "information": 
        {
            "province": "province 123",
            "regency": "regency 123", 
            "district": "district 123"
        }
    }, 
    "mobileNumber": "123"
}

Я хочу искать провинцию в данных json

Я пробую вот так:

SELECT * FROM orders WHERE LOWER(JSON_EXTRACT(description, "$.address.information.province")) LIKE "%prov%"

Результат пуст

Как я могу решить эту проблему?

  • 0
    PROV прописные: -?
  • 0
    @Mahdi Parsa я обновляю свой вопрос
Показать ещё 2 комментария
Теги:

2 ответа

1
Лучший ответ

Проблема в том, что ваш JSON недействителен. Не должно быть запятых после

"district": "district 123", 

а также

"mobileNumber": "123",

Если вы попытаетесь использовать действительный JSON, вы получите ожидаемый результат:

select json_extract('{ "address": { "street": "street 123",         "information": { "province": "province 123",  "regency": "regency 123",             "district": "district 123" } }, "mobileNumber": "123"}', '$.address.information.province')

"province 123"

Я создал db-скрипт, который, кажется, отлично работает с вашими данными:

create table x (id int, description json);
insert into x values(1, '{    "address":     {        "street": "street 123",         "information":         {            "province": "province 123",            "regency": "regency 123",             "district": "district 123"         }    },     "mobileNumber": "123"}');
select * from x where json_extract(description, '$.address.information.province') like '%prov%'

Выход

id  description
1   {"address": {"street": "street 123", "information": {"regency": "regency 123", "district": "district 123", "province": "province 123"}}, "mobileNumber": "123"} 
  • 0
    Я обновил свой вопрос. Посмотри на это. Это то же самое. Результат пустой
  • 0
    Я не уверен, почему это должно быть, я попробовал простую db-скрипку, и она отлично работает.
Показать ещё 6 комментариев
-2

три вещи:

1.when использовать функцию mysql 'JSON_EXTRACT', сделать suer, тип данных - 'json';

2. Есть что-то не так с ur json data.deleted 2 запятыми. Правильный json должен быть таким:

{"address": {
    "street": "street 123",
    "information": {
        "province": "province 123",
        "regency": "regency 123",
        "district": "district 123"
    }
},
"mobileNumber": "123"}

3.it чувствителен к регистру. попробуйте использовать это:

SELECT * FROM orders WHERE JSON_EXTRACT(description, "$.address.information.province") LIKE "%prov%"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню