我正在寻找使用JMESPath更改第三方API的数据结构的方法,还没有弄清楚如何获取键值对的单个对象并将其重组为一个对象数组,每个对象包含键值对。
我已经遍历了所有JMESPath docs和examples,但没有找到我一直在使用的特定数据结构。我曾尝试使用keys(@)和values(@)内置函数来获取这些对的键和值,但是还无法将它们连接到一个数组中。
这是我的原始JSON数据
{
"time": 32,
"terms": {
"192.168.10.121": 84,
"154.223.10.121": 12,
"112.149.10.121": 6
}
}
我正在尝试使用JMESPath将上述JSON数据转换为以下strucutre。
{
"data": [
{ "ip_address": "192.168.10.121", "count": 84 },
{ "ip_address": "154.223.10.121", "count": 12 },
{ "ip_address": "112.149.10.121", "count": 6 }
]}
我已经能够创建键数组或值数组,但无法创建包含键值对的对象数组。
terms.{ data: keys(@)}
terms.{ data: values(@)}
使用terms.{ data: keys(@)}
{
"data": [
"192.168.10.121",
"154.223.10.121",
"112.149.10.121"
]}
使用terms.{ data: values(@)}
{
"data": [
84,
12,
6
]}
这两个函数似乎是我可以用来从对象中提取键和值的唯一函数,这些对象包含最初不在数组中的键-值对。据我所知,我无法像上面的示例那样将这两个函数结合在一起以输出单个数组。
我什至不确定使用JMESPath是否可以实现。任何专家的意见都将不胜感激。
答案 0 :(得分:0)
给出以下原始数据集...
{"time": 32,
"terms": {
"192.168.10.121": 84,
"154.223.10.121": 12,
"112.149.10.121": 6
}
}
...以下jmespath查询...
{"data": [
{ "ip_address": @.terms|keys(@)[0], "count": @.terms|values(@)[0] }
,{ "ip_address": @.terms|keys(@)[1], "count": @.terms|values(@)[1] }
,{ "ip_address": @.terms|keys(@)[2], "count": @.terms|values(@)[2] }
]}
...产生以下结果
{"data": [
{ "ip_address": "192.168.10.121", "count": 84 },
{ "ip_address": "154.223.10.121", "count": 12 },
{ "ip_address": "112.149.10.121", "count": 6 }
]}