使用jq访问字段,可以是字符串或数组

时间:2018-03-21 14:15:27

标签: jq

我在json中有大量数据转储,如下所示:

[{
   "recordList" : {
      "record" : [{
          "Production" : {
              "creator" : {
                  "name" : "A"
              }
          }
      },
      {
          "Production" : {}
      },
      {
          "Production" : [{
              "creator" : {
                  "name" : "B"
              },
              "creator" : {
                  "name" : "C"
              }
              }]
          }]
      }
}]

我需要检查记录中是否至少有一个创建者。如果有,我在CSV文件中为该字段提供1,否则为0。

我的代码:

jq -r '.[].recordList.record[]|"\(if ((.Production.creator.name)? // (.Production[]?.creator.name)?) == null or ((.Production.creator.name)?|length // (.Production[]?.creator.name)?|length) == 0 then 0 else 1 end),"' file.json

问题是该领域的生产'当有多个创建者时,它只是一个数组。

我想在这种情况下获得的结果是:

1,
0,
1,

2 个答案:

答案 0 :(得分:1)

jq 解决方案:

jq -r '.[].recordList.record[].Production 
       | "\(if ((type == "array" and .[0].creator.name !="") 
                 or (type == "object" and .creator.name and .creator.name !="")) 
            then 1 else 0 end),"' file.json

输出:

1,
0,
1,

答案 1 :(得分:0)

简化的jq解决方案:

jq -r '.[].recordList.record[].Production 
   | ((type == "array" and .[0].creator.name) or .creator.name) 
   | if . then "1," else "0," end' file.json