这是因为
我有以下JSON:
{
"694992": [
{
"domain": "example.com",
"domain_id": 49392164,
"data": [
{
"category": "Main",
"category_id": 77133,
"data": [
{
"keyword": "sofort",
"key_id": 25963217,
"data": {
"9242": [
27,
"https://www.example.com/sofort",
false,
false,
1
]
}
},
{
"keyword": "das",
"key_id": 32325213,
"data": {
"9242": [
23,
"https://www.example.com/das",
false,
false,
1
]
}
},
{
"keyword": "wiki",
"key_id": 32325317,
"data": {
"9242": [
44,
"https://www.example.com/wiki",
false,
false,
1
]
}
}
]
}
]
}
]
}
使用JMESPath表达式,我想从JSON中提取一些数据,并以以下形式获取:
+---------+--------+--------------------------------+
| Keyword | Number | URL |
+---------+--------+--------------------------------+
| sofort | 27 | https://www.example.com/sofort |
+---------+--------+--------------------------------+
| das | 23 | https://www.example.com/das |
+---------+--------+--------------------------------+
| wiki | 44 | https://www.example.com/wiki |
+---------+--------+--------------------------------+
我使用以下JMESPath表达式:
*[].data[].data[].{Keyword: keyword, Number: data.*[0], URL: data.*[1]}
但我的输出就像
+---------+--------+----------------------------------+
| Keyword | Number | URL |
+---------+--------+----------------------------------+
| sofort | [27] | [https://www.example.com/sofort] |
+---------+--------+----------------------------------+
| das | [23] | [https://www.example.com/das] |
+---------+--------+----------------------------------+
| wiki | [44] | [https://www.example.com/wiki] |
+---------+--------+----------------------------------+
如何删除数字和URL中的方括号?
data.*
中的*
可能返回多个值,例如:
{
"keyword": "wiki",
"key_id": 32325317,
"data": {
"9242": [
44,
"https://www.example.com/wiki",
false,
false,
1
],
"9243": [
44,
"https://www.example.com/wiki",
false,
false,
1
]
}
}
这是一个完全有效的JSON。
如果确定data
始终只包含一个元素,则可以使用管道表达式:|
来停止投影,并帮助从数组中提取第一个元素。
来自文件:
管道表达式对于停止投影非常有用。它们也可以用于对表达式进行分组。
来源:https://jmespath.org/examples.html#pipes
这个例子也说明了这一点:https://jmespath.org/examples.html#working-带有嵌套数据
所以你的表达最终是:
*[].data[].data[].{Keyword: keyword, Number: data.*[0] | [0], URL: data.*[1] | [0]}
这给出了预期:
[
{
"Keyword": "sofort",
"Number": 27,
"URL": "https://www.example.com/sofort"
},
{
"Keyword": "das",
"Number": 23,
"URL": "https://www.example.com/das"
},
{
"Keyword": "wiki",
"Number": 44,
"URL": "https://www.example.com/wiki"
}
]