【问题标题】:MySQL 5.7 JSON_EXTRACT usage with same key names in JSON arrayMySQL 5.7 JSON_EXTRACT 在 JSON 数组中使用相同的键名
【发布时间】:2017-01-24 09:29:05
【问题描述】:

我在 MySQL 中存储了以下 JSON 对象:

[
  {
    "key": "user_agent",
    "value": "Mozilla/5.0 (Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; rv:11.0) like Gecko"
  },
  {
    "key": "language",
    "value": "fr-FR"
  },
  {
    "key": "color_depth",
    "value": 24
  },
  {
    "key": "js_fonts",
    "value": [
      "Arial",
      "Arial Black"
    ]
  }
]

您能否帮助从该 JSON 中选择第二个或第一个值。可选地,其中“key”是例如“user_agent”。我想这会更好,因为不能保证价值顺序。 我只是无法真正弄清楚如何使用 JSON 路径,如下所述: https://dev.mysql.com/doc/refman/5.7/en/json-path-syntax.html

为方便起见,这里是创建示例表的 SQL 语句:

CREATE TABLE `test` (
  `components` json NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

INSERT INTO `test` VALUES ('[{\"key\": \"user_agent\", \"value\": \"Mozilla/5.0 (Windows NT 6.1; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; r1.0) like Gecko\"}, {\"key\": \"language\", \"value\": \"fr-FR\"}, {\"key\": \"color_depth\", \"value\": 24}, {\"key\": \"js_fonts\", \"value\": [\"Arial\", \"Arial Black\"]}]');

JSON_EXTRACT(components, '$[1]') 提取第二个数组:

{"key": "language", "value": "fr-FR"} 

但这并不是我想要的。

【问题讨论】:

    标签: mysql json


    【解决方案1】:

    好吧..这比我想象的要容易。至少要提取它:

    SELECT JSON_EXTRACT(components, '$[1].value') FROM test;
    

    返回我想要的"fr-FR"。或语法较短的未引用结果:

    SELECT components->>'$[1].value' FROM test;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 2021-01-24
      • 2021-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多