【问题标题】:Extract JSON object's values as array from MySQL JSON column从 MySQL JSON 列中提取 JSON 对象的值作为数组
【发布时间】:2019-04-30 04:01:00
【问题描述】:

我有一个 json 类型的 MySQL 列。在那里,存储了一个类似 JSON 对象的字典。现在,我想从这个 JSON 对象中提取值并创建一个 JSON 数组。

我怎样才能做到这一点?

示例查询

with json_objs(json_col) as (
  select CAST('{"key1": "value1", "key2": "value2"}' AS JSON)
  UNION ALL
  select CAST('{"key3": "value3", "key4": "value4"}' AS JSON)
)
select SOME_EXPR_I_CAN_T_FIGURE_OUT from json_objs

预期结果

+----------------------+
| resulting_column     |
+----------------------+
| ["value1", "value2"] |
| ["value3", "value4"] |
+----------------------+

(如果需要表 DDL:)

CREATE TABLE `json_objs` (
  `json_col` json DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

【问题讨论】:

标签: mysql arrays json json-extract


【解决方案1】:

您可以在表达式column -> path 中使用-> 运算符,如下所示:

create table table1 (
   json_dict JSON
);

insert into table1 values('{"ak":"av","bk":"bv"}');
insert into table1 values('{"ak2":"av2","bk2":"bv2"}');

select * from table1;
+------------------------------+
| json_dict                    |
+------------------------------+
| {"ak": "av", "bk": "bv"}     |
| {"ak2": "av2", "bk2": "bv2"} |
+------------------------------+
2 rows in set (0.00 sec)

select json_dict->"$.*" from table1;
+------------------+
| json_dict->"$.*" |
+------------------+
| ["av", "bv"]     |
| ["av2", "bv2"]   |
+------------------+
2 rows in set (0.00 sec)

https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html#operator_json-column-path

【讨论】:

  • 感谢您的提琴。也 +1 回答:)
  • 节省了跑动
【解决方案2】:

除了->运算符,还可以使用Json_Extract()函数:

架构 (MySQL v8.0)

create table table1 (
   json_dict JSON
);

insert into table1 values('{"ak":"av","bk":"bv"}');
insert into table1 values('{"ak2":"av2","bk2":"bv2"}');

查询 #1

select JSON_EXTRACT(json_dict, '$.*') from table1;

| JSON_EXTRACT(json_dict, '$.*') |
| ------------------------------ |
| ["av", "bv"]                   |
| ["av2", "bv2"]                 |

View on DB Fiddle

【讨论】:

  • 我的速度更快,您从我的答案中复制了代码。但是,我赞成你的,因为你展示了一个稍微不同的选择:)
  • @marekful 感谢您的提琴。我懒得创作小提琴;所以装在你的小提琴上:P
猜你喜欢
  • 2023-04-02
  • 1970-01-01
  • 2021-03-10
  • 2019-06-04
  • 2019-03-22
  • 2019-09-20
  • 2015-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多