我有一个JSON文件,其中包含彼此相似但不完全相同的对象。所有对象都有一个主标识符,但对象中可能存在或不存在其他键。
我的问题:对于对象中的给定键,如果存在该值,如何打印该值,以及类似于" NA"如果没有,打印密钥的原始名称?
示例输入:
{
"DBInstances": [
{
"Identifier": 101,
"foo": "some_value",
"bar": 60,
"Model": "A"
},
{
"Identifier": 102,
"foo": "some_value",
"Model": "B"
}
]
}
期望的输出:
{
"Identifier": 101,
"foo": "some_value",
"bar": 60,
"Model": "A"
},
{
"Identifier": 102,
"foo": "some_value",
"bar": "NA",
"Model": "B"
}
我创建了一个功能(部分)用于不存在,但根本不存在:
def exist(element):
if (has( element ) == true)
then { element: "true" }
else { element: "NA" }
end;
当我打电话给:
exist( "bar" )
"存在"部分是完全错误的,JQ打印"元素"和"真"而不是原始的密钥名称和值。
对于"不存在"部分,JQ打印" NA"很好,但"元素"而不是原始的密钥名称。
我正在使用JQ 1.3。
答案 0 :(得分:1)
这是写你"存在"的正确方法。定义:
def exist(element):
if has( element )
then { (element): .[element] }
else { (element): "NA" }
end;
已经使用jq 1.3进行了测试,但请尝试升级到更新的版本。
在实践中,人们更有可能使用这样的习语:
if has(element) then . else .[element] = "NA" end
答案 1 :(得分:0)
这是另一个使用update assignment |=
的解决方案 .DBInstances[] | .bar |= if .==null then "NA" else . end