我有一个表,在表PRICING_data中有下面的json数据类型列

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 unquote,但它仍然没有给我任何行。
select * from `PRICING_DATA` where JSON_UNQUOTE(JSON_EXTRACT(pricingJson, "$.product.productFamily")) = "Compute Instance";

最佳答案

您需要“取消引用”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"))

10-04 11:17