mysql - 提取计算出的 JSONpath 响应的第一个元素

标签 mysql json jsonpath

如果我有以下 JSON 数据:

{
  "providers": {
    "abc": {
      "provider": "foo",
      "token": "abc123"
    },
    "def": {
      "provider": "bar",
      "token": "def567"
    }
  }
}

我想找到一个返回“第一个”提供者 token 的 JSON 路径,即 abc123。问题在于找到“第一个”,因为 providers 是一个对象,而不是一个数组。

我想我可以从 $.providers.* 开始,它返回以下数组:

[
  {
    "provider": "foo",
    "token": "abc123"
  },
  {
    "provider": "bar",
    "token": "def567"
  }
]

但我似乎无法对该数组执行任何操作。例如$.providers.*[0] 不起作用。

我所要求的可能吗? (如果重要的话,我正在使用 MySQL,尽管我正在寻找通用的 JSONPath 解决方案。)

最佳答案

您需要使用提供的表/子查询来解析出您需要的部分。

Yes, except I don't know that abc is the first provider.

这会解析出第一个提供者元素..

查询

SELECT 
 *
 , records_json_array.json_array->'$[0].token'
FROM (

SELECT 
 records.json->'$.providers.*' AS json_array
FROM (

SELECT 
 '{
  "providers": {
    "abc": {
      "provider": "foo",
      "token": "abc123"
    },
    "def": {
      "provider": "bar",
      "token": "def567"
    }
  }
}' AS json
FROM 
 DUAL
) AS records

) AS records_json_array

结果

| json_array                                                                       | records_json_array.json_array->'$[0].token' |
| -------------------------------------------------------------------------------- | ---------------------------------------------- |
| [{"token": "abc123", "provider": "foo"}, {"token": "def567", "provider": "bar"}] | "abc123"                                       |

demo

关于mysql - 提取计算出的 JSONpath 响应的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53070087/

相关文章:

javascript - 使用 XPath 样式访问 Javascript JSON 对象属性

c# - 从 char 索引确定 JSONPath

java - SQL语句中的错误

javascript - 使用 Resources 制作不带引号的 JSON

javascript - Angular View 和 html 可以使用 HTTP,而 JSON RestAPI 调用可以使用 HTTPS 吗?

javascript - Threejs blender 导出器以错误的格式导出

javascript - 用于 Firebase 规则的 JsonPath

mysql - 2个多对多关系的数据库建模

mysql - 即使列在 MySQL 中返回空结果也显示行

MySQL 独立还是通过 XAMPP?