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