问题描述
问题
我想将一个对象解压缩为一个对象数组,并在嵌套数组中的值旁边重复一个顶级键。这似乎微不足道,但是jmespath.org上的所有教程或示例都没有涉及这种情况。
输入数据
{
"name": "ryan","pets": [
"charlie","michael","snorlax","socrates","apollo"
]
}
所需结果
[
{
"owner": "ryan","pet_name": "charlie"
},{
"owner": "ryan","pet_name": "michael"
},"pet_name": "snorlax"
},"pet_name": "socrates"
},"pet_name": "apollo"
}
]
尝试的解决方案
这会生成多个对象,但是我不清楚如何随身携带owner
键:
$ jp -f test.json 'pets[].{owner: name,pet: @}'
[
{
"owner": null,"pet": "charlie"
},{
"owner": null,"pet": "michael"
},"pet": "snorlax"
},"pet": "socrates"
},"pet": "apollo"
}
]
这会带来正确的信息,但不会生成多个对象:
$ jp -f test.json '[{owner: name,pet_name: pets[] }]'
[
{
"owner": "ryan","pet_name": [
"charlie","apollo"
]
}
]
解决方法
请检查类似的问题:JMESPath expression to flatten array of objects,each with nested arrays of objects似乎无法在纯JMESPath表达式中执行,因为它在单个作用域上操作。在链接的答案中,您将找到示例如何在ansible或使用jq的情况下处理此问题。