【发布时间】:2018-03-22 11:29:41
【问题描述】:
我在 file.json 中有大量数据转储,如下所示:
[{
"recordList" : {
"record" : [{
"Production" : {
"creator.role" : {
"term" : "A"
}
}
},
{
"Production" : {}
},
{
"Production" : {
"creator.role" : {
"term" : ""
}
}
},
{
"Production" : [
{
"creator.role" : {"term" : "B"}
},
{
"creator.role" : {"term" : ""}
}
]
}]
}
}]
我需要检查记录中是否至少有一个“creator.role”的“术语”(不为空)。如果有,我在 CSV 文件中为该字段提供 1,否则为 0。
感谢之前帖子中的答案,我设法访问了一个字段“创建者”,尽管它可能是一个对象或数组(请参阅:Accessing field with jq that can be string or array)。
但是现在对于带有特殊字符'.'的字段'creator.role'我也有同样的问题。并且不知道如何处理。
我试过的代码:
jq -r '.[].recordList.record[].Production | "\(if ((type == "array" and .[0]["creator.role"].term and .[0]["creator.role"].term !="") or (type == "object" and ["creator.role"].term and ["creator.role"].term !="")) then 1 else 0 end),"' file.json
我收到此错误:
Cannot index array with string "term"
在这种情况下我想得到的输出是:
1,
0,
0,
1,
【问题讨论】:
-
注意,你的最后一个
"Production" : [{}...]项目最终将包含一个带有一个键的对象,而不是2。对象不能有重复的键,这就是它会“折叠”的原因。您的最后一个"Production"项目不能使用1, -
好吧,我明白了。最后一个“生产”应该有 2 个对象而不是 1 个。
-
我在我的问题中更改了它。这样那部分就解决了,但是我仍然不知道在这种情况下如何处理特殊字符。
标签: arrays object special-characters jq is-empty