您好我有以下带有嵌套对象的JSON文件:
{
"Maps": {
"Campus": [
{
"name": "nus",
"Building": [
{
"name": "sde1",
"Floor": [
{
"name": "floor1"
},
{
"name": "floor2"
}
]
},
{
"name": "sde2"
}
]
},
{
"name": "ntu",
"Building": [
{
"name": "ece1",
"Floor": [
{
"name": "floor1"
},
{
"name": "floor2"
}
]
},
{
"name": "ece2"
}
]
}
]
}
}
我想使用jq
来解析上面的JSON文件,并获得以下格式:
nus>sde1>floor1
nus>sde1>floor2
ntu>ece1>floor1
ntu>ece1>floor2
基本上我必须将Campus Name
与Building Name
和Floor name
连接起来,并在其间放置一个<
符号。
如果嵌套对象字段Floor
不存在,请忽略该解析并继续下一个子对象。
如何实现?感谢。
答案 0 :(得分:0)
您可以使用以下jq
命令:
jq '.Maps.Campus[]|"\(.name)>\(.Building[]|"\(.name)>\(.Floor[]?.name)")"' file.json
jq
非常聪明,可以打印.name
和.Building[].name
的组合,因为.Building
是一个数组。相同的操作已应用于.Building[].name
和Floor[]?.name
。 ?
因为楼层并不总是设置。
答案 1 :(得分:0)
这是一个使用jq变量的解决方案
.Maps.Campus[]
| .name as $campus
| .Building[]
| .name as $bldg
| .Floor[]?
| .name as $floor
| "\($campus)>\($bldg)>\($floor)"