具有以下json结构:
{
"outerDescription1": {
"innerDescription1": {
"otherProperties": 1,
"items": [
"arrayItem1",
"arrayItem2"
]
}
},
"outerDescription2": {
"innerDescription2": {
"otherProperties": 2,
"items": [
"arrayItem3",
"arrayItem4"
]
}
}
}
我希望得到以下结果:
{
"item": "arrayItem1",
"outer": "outerDescription1",
"inner": "innerDescription1",
"otherProperties": 1
}
{
"item": "arrayItem2",
"outer": "outerDescription1",
"inner": "innerDescription1",
"otherProperties": 1
}
{
"item": "arrayItem3",
"outer": "outerDescription2",
"inner": "innerDescription2",
"otherProperties": 2
}
{
"item": "arrayItem4",
"outer": "outerDescription2",
"inner": "innerDescription2",
"otherProperties": 2
}
假设:有许多outerDescription
和innerDescription
密钥,并且它们在前面是未知的。
单层展开是很简单的,但是展开具有不同键的双重嵌套对象对我来说是一个挑战。
我能得到的最接近的答案是:
jq "with_entries(.value = {outer: .key} + .value)[]"
其结果是:
{
"outer": "outerDescription1",
"innerDescription1": {
"otherProperties": 1,
"items": [
"arrayItem1",
"arrayItem2"
]
}
}
{
"outer": "outerDescription2",
"innerDescription2": {
"otherProperties": 2,
"items": [
"arrayItem3",
"arrayItem4"
]
}
}
但是现在,如果不确切知道下一个嵌套键的名称,我就无法像outer
被吞下一样进行第二次展开。
我用的是JQ 1.6
3条答案
按热度按时间6pp0gazn1#
可以使用
path
查找相应的路径,使用getpath
检索它们的值:Demo
tag5nh1u2#
下面是一个使用
to_entries
的简单解决方案:或者,等价地但没有变量:
如果键的顺序很重要,则可以(例如)添加
{item, outer, inner, otherProperties}
这样的表达式。vuktfyat3#
如果您知道
items
属性的名称,则以下等效程序的可读性很强:输出: