【问题标题】:MYSQL - How to extract value from nested json?MYSQL - 如何从嵌套的 json 中提取值?
【发布时间】:2021-09-27 04:00:22
【问题描述】:

我有一个“信息”列存储嵌套的 json 字符串,如下所示:

{"Text":"5","Elements":{"New\\Old\\Used\\Sold\\Blank":{"123456":{"id":"056"}}}}

我需要从这个 json 字符串中提取 id 值。 我尝试在我的选择语句中使用 JSON_EXTRACT 函数,如下所示:

trim(both'"' FROM JSON_EXTRACT(info, '$.Elements[0][0][0][0]')) AS id,

我试过了:

trim(both'"' FROM JSON_EXTRACT(info, '$.[1][0][0][0][0]')) AS id,

但我在列中得到空值。

我尝试使用其他几种组合,我在方括号内更改数字以适应元素位置,但我总是得到空值。

关于如何从这个 json 中提取 id 有什么建议吗?

【问题讨论】:

标签: mysql


【解决方案1】:

Elements 不是数组,不能使用数组索引从中提取。

info->>"$.Elements.New\\Old\\Used\\Sold\\Blank\\.123456.id"

不要使用trim() 删除周围的引号,使用JSON_UNQUOTE(JSON_EXTRACT(...))->>

【讨论】:

  • 感谢您的回复。我明白你在说什么。问题是列信息将在每一行中包含 json 字符串,并且该 json 字符串将具有动态元素。所以我不能使用 .123456.id 因为那个数字 123456 在下一个 json 字符串中会有所不同。所以我试图通过选择元素位置的计数来访问 id 。知道如何在 sql 中做到这一点吗?
  • 据我所知,这在 MySQL 中是不可能的。 MySQL 的 JSON 函数非常有限。您最好只获得全部价值并使用客户端编程语言进行操作。
  • 是的 :-( 我可以在 python 中很容易地做到这一点,但我希望我能用 mysql 解决这个问题
  • 据我所知,在 MySQL 中是不可能的。 我认为这种说法是不正确的。从 JSON 中收集与"id" 模式匹配的所有键,并提取与提取路径匹配的值是没有问题的。
  • @Akina - 你知道怎么做吗?
猜你喜欢
  • 1970-01-01
  • 2023-03-11
  • 2016-03-12
  • 2018-09-08
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 2015-07-24
  • 2021-08-26
相关资源
最近更新 更多