【问题标题】:Subset a JSON Object with MySQL Query使用 MySQL 查询子集 JSON 对象
【发布时间】:2020-01-11 16:48:42
【问题描述】:

我有一个 MySQL 数据库,其中一张表称为“my_table”。在此表中,其中一列称为“my_json_column”,该列在 MySQL 中存储为 JSON 对象。 JSON 对象有大约 17 个键:值对(见下文)。我只想从返回 17 个字段中的 4 个的 MySQL 查询中返回一个“精简”的 JSON 对象。

我尝试了许多不同的 MySQL 查询,见下文,但我似乎无法获得返回的子集 JSON 对象。我确信这很简单,但我一直没有成功。

类似这样的:

SELECT
    json_extract(my_json_column, '$.X'),
    json_extract(my_json_column, '$.Y'),
    json_extract(my_json_column, '$.KB'),
    json_extract(my_json_column, '$.Name')
FROM my_table;

产量:

5990.510000  90313.550000   5990.510000    "Operator 1"

我想用键值对获得这个结果(返回的 JSON 对象):

[ { X: 5990.510000, Y: 90313.550, KB: 2105, Name: "Well 1" } ]

样本数据:

{
    "Comment" : "No Comment",
    "Country" : "USA",
    "County" : "County 1",
    "Field" : "Field 1",
    "GroundElevation" : "5400",
    "Identifier" : "11435358700000",
    "Interpreter" : "Interpreter 1",
    "KB" : 2105,
    "Name" : "Well 1",
    "Operator" : "Operator 1",
    "Owner" : "me",
    "SpudDate" : "NA",
    "State" : "MI",
    "Status" : "ACTIVE",
    "TotalDepth" : 5678,
    "X" : 5990.510000,
    "Y" : 90313.550    
}

提前谢谢你。

【问题讨论】:

  • 有人想知道您为什么要使用 JSON。为什么不只使用普通列而不是 JSON 对象的字段的普通表?那你就用SELECT X, Y, KB, Name FROM my_table

标签: mysql sql json database select


【解决方案1】:

使用JSON_OBJECT(),自 MySQL 5.6 起可用:

评估一个(可能为空的)键值对列表并返回一个包含这些对的 JSON 对象

SELECT
    JSON_OBJECT(
        'X', json_extract(my_json_column, '$.X'),
        'Y', json_extract(my_json_column, '$.Y'),
        'KB', json_extract(my_json_column, '$.KB'),
        'Name', json_extract(my_json_column, '$.Name')
    ) my_new_json
FROM my_table;

这个 demo on DB Fiddle 与您的示例数据返回:

| my_new_json                                                 |
| ----------------------------------------------------------- |
| {"X": 5990.51, "Y": 90313.55, "KB": 2105, "Name": "Well 1"} |

【讨论】:

  • 哇!一百万谢谢。 JSON_OBJECT 就是它!再次感谢您的实时回复。
  • 欢迎@ChrisG!如果我的回答正确回答了您的问题,请点击绿色复选标志accept it...谢谢!
  • 谢谢 GMB,我刚做了。
猜你喜欢
  • 2019-02-07
  • 2016-10-18
  • 1970-01-01
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 2021-11-08
相关资源
最近更新 更多