JQ 中的可选键

Adi*_*Adi 4 bash json jq

输入内容(somejson.json)是

{ "m1": "1 some m1", "m2": null , "m3" : "unwanted"}
{ "m1": "2 some m1", "m3" : "unwanted"}
{ "m1": "3 some m1", "m2": "3 some m2" , "m3" : "unwanted"}
{ "m1": "4 some m1", "m3" : "unwanted"}
Run Code Online (Sandbox Code Playgroud)

是否有提取选项,例如 m1. 如果存在的话还提取 m2 吗?

例子。对于 m1 我使用以下命令

cat somejson.json |jq '.m1'
Run Code Online (Sandbox Code Playgroud)

输出

"1 some m1"
"2 some m1"
"3 some m1"
"4 some m1"
Run Code Online (Sandbox Code Playgroud)

对于 m2 我使用以下命令

cat somejson.json |jq '.m2'
Run Code Online (Sandbox Code Playgroud)

输出

null
null
"3 some m2"
null
Run Code Online (Sandbox Code Playgroud)

但我想要一个合并结果,包括 m1 和 m2 ,如下所示

"1 some m1"
"2 some m1"
"3 some m1"
"3 some m2"
"4 some m1"
Run Code Online (Sandbox Code Playgroud)

Ama*_*dan 5

获取两个值;null如果它们不存在,它们就会存在。然后只需从结果中过滤空值即可。

<somejson.json jq '.m1, .m2 | select(. != null)'
Run Code Online (Sandbox Code Playgroud)

  • @peak 你能停下来吗?该文本与示例数据不一致,我选择信任该数据。这是我第三次重复同样的事情。 (3认同)
  • @peak 再说一次,不。查看示例数据和所需的结果。言语可能会产生误导;代码和数据是明确的。 (2认同)