如果我具有以下JSON数据:
{
"providers": {
"abc": {
"provider": "foo",
"token": "abc123"
},
"def": {
"provider": "bar",
"token": "def567"
}
}
}
我想找到一个返回“第一个”提供者(即abc123
)的令牌的JSON路径。问题在于找到“第一个”,因为providers
是一个对象,而不是数组。
我想我可以从$.providers.*
开始,它返回以下数组:
[
{
"provider": "foo",
"token": "abc123"
},
{
"provider": "bar",
"token": "def567"
}
]
但是我似乎无法对该数组做任何事情。例如$.providers.*[0]
不起作用。
我要的可能吗? (如果很重要,尽管我正在寻找通用的JSONPath解决方案,但我正在使用MySQL。)
答案 0 :(得分:1)
您需要使用提供的表/子查询来解析所需的部分。
是的,除了我不知道abc是第一个提供者。
这将解析出第一个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" |
答案 1 :(得分:0)
(params) => `${this.name} is friends with ${el}`;
一组1行(0.0008秒)
您的路径是provider.abc.provider
答案 2 :(得分:0)
我最终像这样解决了它(使用MySQL 5.7,这就是为什么我没有->>
语法的原因):
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;