jq json解析器连接嵌套数组对象值

时间:2016-08-03 08:52:57

标签: json parsing jq

您好我有以下带有嵌套对象的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 NameBuilding NameFloor name连接起来,并在其间放置一个<符号。

如果嵌套对象字段Floor不存在,请忽略该解析并继续下一个子对象。

如何实现?感谢。

2 个答案:

答案 0 :(得分:0)

您可以使用以下jq命令:

jq '.Maps.Campus[]|"\(.name)>\(.Building[]|"\(.name)>\(.Floor[]?.name)")"' file.json

jq非常聪明,可以打印.name.Building[].name的组合,因为.Building是一个数组。相同的操作已应用于.Building[].nameFloor[]?.name?因为楼层并不总是设置。

答案 1 :(得分:0)

这是一个使用jq变量的解决方案

  .Maps.Campus[]
| .name as $campus
| .Building[]
| .name as $bldg
| .Floor[]?
| .name as $floor
| "\($campus)>\($bldg)>\($floor)"
相关问题