MySql 8.0 - 过滤后的 JSON 查询
MySql 8.0 - Filtered JSON query
我有一个 JSON blob,我正试图从中提取值,特别是评级信息部分下的邮政编码(预期值 = 90703)。 MySql 8 是否支持 JSON 过滤表达式?
JSON:
{
"quote_number": null,
"items": [
{
"annual_amount": 0.0,
"pro_rata_amount": 0.0,
"name": "Value Information",
"categories": {
"Use": "Single Family Detached",
"Zip Code": "51431",
"Floor Coverings": "Carpet"
}
},
{
"annual_amount": 0.0,
"pro_rata_amount": 0.0,
"name": "Rating Information",
"categories": {
"Number of Non-Weather Water Losses": "0",
"Protection Class": "2",
"Zip Code": "90703",
"Special Hazard Interface Area": "N"
}
}
],
"total": {
"annual_fees": 0.0,
"annual_premium": 9.0
},
"policy_id": null
}
路径:$.items[?(@.name==“评分信息”)].categories.Zip代码
路径似乎是正确的,因为我通过此站点测试时获取数据:https://jsonpath.com/
如果 MySql 不支持 JSON 过滤,建议的解决方法是什么?
乔
MySQL 不完全支持 jsonpath 表达式。它不支持过滤表达式。此处记录了对 jsonpath 的有限支持:https://dev.mysql.com/doc/refman/8.0/en/json.html#json-path-syntax
我测试了你的数据:
set @j = '{ ...your json... }';
select * from json_table(@j, '$.items[*]' columns(
name text path '$.name',
zip_code text path '$.categories."Zip Code"'
)) as j;
+--------------------+----------+
| name | zip_code |
+--------------------+----------+
| Value Information | 51431 |
| Rating Information | 90703 |
+--------------------+----------+
然后您可以在查询中添加一个 WHERE 子句以获得您想要的结果。
阅读更多关于 JSON_TABLE() 的信息:https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html
我有一个 JSON blob,我正试图从中提取值,特别是评级信息部分下的邮政编码(预期值 = 90703)。 MySql 8 是否支持 JSON 过滤表达式?
JSON:
{ "quote_number": null, "items": [ { "annual_amount": 0.0, "pro_rata_amount": 0.0, "name": "Value Information", "categories": { "Use": "Single Family Detached", "Zip Code": "51431", "Floor Coverings": "Carpet" } }, { "annual_amount": 0.0, "pro_rata_amount": 0.0, "name": "Rating Information", "categories": { "Number of Non-Weather Water Losses": "0", "Protection Class": "2", "Zip Code": "90703", "Special Hazard Interface Area": "N" } } ], "total": { "annual_fees": 0.0, "annual_premium": 9.0 }, "policy_id": null }
路径:$.items[?(@.name==“评分信息”)].categories.Zip代码
路径似乎是正确的,因为我通过此站点测试时获取数据:https://jsonpath.com/
如果 MySql 不支持 JSON 过滤,建议的解决方法是什么?
乔
MySQL 不完全支持 jsonpath 表达式。它不支持过滤表达式。此处记录了对 jsonpath 的有限支持:https://dev.mysql.com/doc/refman/8.0/en/json.html#json-path-syntax
我测试了你的数据:
set @j = '{ ...your json... }';
select * from json_table(@j, '$.items[*]' columns(
name text path '$.name',
zip_code text path '$.categories."Zip Code"'
)) as j;
+--------------------+----------+
| name | zip_code |
+--------------------+----------+
| Value Information | 51431 |
| Rating Information | 90703 |
+--------------------+----------+
然后您可以在查询中添加一个 WHERE 子句以获得您想要的结果。
阅读更多关于 JSON_TABLE() 的信息:https://dev.mysql.com/doc/refman/8.0/en/json-table-functions.html