根据MySQL中的值检索JSON数组元素

时间:2019-01-23 15:52:45

标签: mysql json

我在MySQL中存储了一个json对象,如下:

{"PhysicalAddresses": {
"Entry": [
{"Key": "Home", "City": "City1", "State": "ST", "Street": "Some old street", "PostalCode": "00000", "CountryOrRegion": null},
{"Key": "Business", "City": "City2", "State": "ST", "Street": "A much nicer street", "PostalCode": "00000", "CountryOrRegion": null}
]}}

我想获取公司地址:

json_extract(column,"$.PhysicalAddresses.Entry[*](where Key=Business)")

我可以在“ where Key = Business”中添加哪些内容来实现此目的,或者无法以这种方式在MySQL中搜索JSON?

谢谢

2 个答案:

答案 0 :(得分:1)

JSON Path Syntax允许您在路径中搜索值或子文档,但是它没有用于测试在给定路径中找到的值的语法。

在这种情况下, NOT 使用JSON将是更好的方法。将每个条目存储在单独的表的一行中,并将条目的字段存储为独立的列。然后查询就简单得多了:

SELECT * FROM PhysicalAddresses WHERE `Key` = 'Business'

具有讽刺意味的是,很多人说他们使用JSON来提高灵活性。它确实使您可以灵活地插入各种数据格式,但是随后在查询数据的方式上却牺牲了灵活性。

答案 1 :(得分:1)

您可以通过表中的 SELECT JSON_EXTRACT(column,“ $。PhysicalAddresses.Entry [1] .Key”)到达所需的数组;但这取决于“业务”始终位于数组的第二位置。

我建议从表中使用类似 SELECT JSON_EXTRACT(column,“ $。PhysicalAddresses.Entry [*]。Key”)的东西; ,它将返回[“ Home”,“ Business” ],然后在您的应用程序中进行解析或使用 JSON_CONTAINS()