MySQL JSON, где пункт - PullRequest
       8

MySQL JSON, где пункт

1 голос
/ 17 мая 2019

У меня есть таблица с приведенным ниже столбцом типа данных json в таблице PRICING_DATA

pricingJson type json nullable

И я использую sql для запроса таблицы.

select * from `PRICING_DATA` where `pricingJson`->"$.product.productFamily" = "Compute Instance";

Пример данных JSON, как показано ниже

{
"product": {
    "productFamily": "Compute Instance",
    "attributes": {
        "enhancedNetworkingSupported": "Yes",.....

Но запрос не возвращает никаких строк. Что я тут не так делаю?

Необработанная строка Json из базы данных кажется экранированной.

"{\"product\":{\"productFamily\":\"Compute Instance\",\"attributes\":{\"enhancedNetworkingSupported\":\"Yes

Я использовал приведенную ниже цитату из json, но она не дает мне никаких строк.

select * from `PRICING_DATA` where JSON_UNQUOTE(JSON_EXTRACT(pricingJson, "$.product.productFamily")) = "Compute Instance";

1 Ответ

2 голосов
/ 17 мая 2019

Чтобы сравнить ее, вам нужно «заключить в кавычки» строку JSON.

select * from `PRICING_DATA` where `pricingJson`->>"$.product.productFamily" = "Compute Instance";

Документы: https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#operator_json-inline-path


Использование pricingJson->"$.product.productFamily" сокращенно для

JSON_EXTRACT(pricingJson, "$.product.productFamily")

, который возвращает значение, но в виде заключенной в кавычки строки.Итак:

SELECT pricingJson->"$.product.productFamily" FROM PRICING_DATA

вернет:

+-----------------------------------------+
| pricingJson->"$.product.productFamily"  |
+-----------------------------------------+
| "Compute Instance"                      |
+-----------------------------------------+

Вам нужно удалить кавычки с помощью функции JSON_UNQUOTE(), а использование pricingJson->>"$.product.productFamily" является сокращением для:

JSON_UNQUOTE(JSON_EXTRACT(pricingJson, "$.product.productFamily"))
...