【问题标题】:Extracting first key of JSON extract in MySQL在 MySQL 中提取 JSON 提取的第一个键
【发布时间】:2020-03-03 14:05:41
【问题描述】:

这些是我的表的列和值:

ID | RULE
123 | {"buy":{"10000":{"q":1}},"total":{"t":"DOLLAR_OFF","v":4.05}}
445 | {"buy":{"11000":{"q":1}},"total":{"t":"DOLLAR_OFF","v":2.25}}

我的预期输出:

ID | ArticleInfo
123 | 10000
445 | 11000

卡住了。

【问题讨论】:

  • RULE列的列类型是什么?是 varchar 还是 JSON 字段
  • 刚查过,类型是Text。
  • 在这种情况下,看看我下面的答案,你想使用支持将 TEXT 转换为 JSON 然后解析它的最后一部分
  • 到目前为止你尝试过什么?你究竟在哪里卡住了?

标签: mysql sql json json-extract


【解决方案1】:

答案取决于您用于列的数据类型。

如果您使用的是 JSON 数据类型,那么您可以使用 JSON_EXTRACT 和 JSON_KEYS 的组合来提取密钥

例如,如果你运行

SELECT ID, JSON_EXTRACT(JSON_KEYS(JSON_EXTRACT(RULE, '$.buy')),"$[0]") AS ArticleInfo FROM test;

它会返回

ID | ArticleInfo
123 | "10000"
445 | "11000"

如果键实际上总是数字,您可以通过将它们乘以 1 将它们转换为整数。

SELECT ID, (JSON_EXTRACT(JSON_KEYS(JSON_EXTRACT(RULE, '$.buy')),"$[0]") * 1) AS ArticleInfo FROM test;
ID | ArticleInfo
123 | 10000
445 | 11000

如果是 CHAR/VARCHAR/TEXT,那么您可以使用与上述相同的方法,但首先使用 CAST(RULE AS JSON) 将 varchar 转换为 JSON

E.G

SELECT id, 
(JSON_EXTRACT(JSON_KEYS(JSON_EXTRACT(CAST(rule AS JSON), '$.buy')),"$[0]")* 1)
FROM test;

如果您使用的 MySQL 版本不支持 JSON,那么您可以使用 SUBSTRING、POSITION 和其他字符串函数的组合

【讨论】:

    猜你喜欢
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-29
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    相关资源
    最近更新 更多