使用jq
我希望转换格式数据:
{
"key": "something-else",
"value": {
"value": "bloop",
"isEncrypted": false
}
}
{
"key": "something",
"value": {
"value": "blah",
"isEncrypted": false
}
}
格式:
{
something: "blah",
something-else: "bloop"
}
过滤掉加密值'一路上。我怎样才能做到这一点?我已经达到了以下目的:
.parameters | to_entries[] | select (.value.isEncrypted == false) | .key + ": " + .value.value
产生:
"something-else: bloop"
"something: blah"
关闭,但还没有。我怀疑它有一些聪明的功能。
答案 0 :(得分:1)
给出示例输入,这是一个简单的解决方案,假设对象流可用作数组。 (如果将JSON对象作为jq的输入给出,则可以使用jq -s
来完成,或者在您的情况下,按照您的示例,只需使用.parameters | to_entries
)。
map( select(.value.isEncrypted == false) | {(.key): .value.value } )
| add
这会生成JSON对象:
{
"something-else": "bloop",
"something": "blah"
}
这里的主要想法是:
{( KEYNAME ): VALUE}
add
了解其工作原理的一种方法是首先运行过滤器的第一部分(map(...))。
keys_unsorted
如果您想避免to_entries
的开销,您可能需要考虑以下方法,该方法背负了您对.parameters
的隐含描述:
.parameters
| [ keys_unsorted[] as $k
| if .[$k].isEncrypted == false
then { ($k) : .[$k].value } else empty end ]
| add