Mysql 提取计算出的JSONpath响应的第一个元素
如果我有以下JSON数据:Mysql 提取计算出的JSONpath响应的第一个元素,mysql,json,jsonpath,Mysql,Json,Jsonpath,如果我有以下JSON数据: { "providers": { "abc": { "provider": "foo", "token": "abc123" }, "def": { "provider": "bar", "token": "def567" } } } 我想找到一个JSON路径,它返回第一个提供者的令牌,即abc123。问题在于找到第一个,因为提供程序是一个对象,而不是数组 我想我可以从$.pro
{
"providers": {
"abc": {
"provider": "foo",
"token": "abc123"
},
"def": {
"provider": "bar",
"token": "def567"
}
}
}
我想找到一个JSON路径,它返回第一个提供者的令牌,即abc123。问题在于找到第一个,因为提供程序是一个对象,而不是数组
我想我可以从$.providers.*开始,它返回以下数组:
[
{
"provider": "foo",
"token": "abc123"
},
{
"provider": "bar",
"token": "def567"
}
]
但我似乎对这个数组无能为力。e、 g.$.providers.[0]不起作用
我所要求的可能吗?如果有必要的话,我将使用MySQL来实现这一点,尽管我正在寻找一个通用的JSONPath解决方案
select doc->>"$.providers.abc.provider" from x1;
+----------------------------------+
| doc->>"$.providers.abc.provider" |
+----------------------------------+
| foo |
+----------------------------------+
设置为1行0.0008秒
您的路径是providers.abc.provider您需要使用传递的表/子查询来解析出所需的部分
是的,不过我不知道abc是第一家供应商 这将解析出第一个provider元素 质疑 结果
我最终使用MySQL 5.7解决了这个问题,这就是为什么我没有->>语法:
你期望的结果是什么?这个呢?你需要使用交付的表来解析它。预期的结果将是abc123。我回答了一个关于我的示例的更新,即输出abc123@ColinYes,除了我不知道abc是第一个提供程序之外。在这里遍历数组或使用如下内容并只处理第一个条目会更容易。选择doc->$.providers.*.provider from x1;+-------------+\124;doc->$.providers.*.provider |+---------------------+[foo,bar]|+-----------------------+1行,设置为0.0004 secUpvote,因为它可以工作,尽管我认为添加许多级别的子查询会很快变得无法管理。特别是如果您希望从表中选择JSON数据和其他数据。
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" |
SET @j = '{
"providers": {
"abc": {
"provider": "foo",
"token": "abc123"
},
"def": {
"provider": "bar",
"token": "def567"
}
}
}';
SELECT JSON_UNQUOTE(
JSON_EXTRACT(
JSON_EXTRACT(@j, "$.providers.*"),
"$[0].token"
)
) AS token;