如何通过jq选择键和子对象属性?

时间:2016-11-28 13:44:52

标签: json jq

鉴于json filter.json

{
    "123": {
        "name": "Horst"
    },
    "789": {
        "name": "Bob"
    }
}

我想过滤每个键和名称,想要输出如下:

"123": "Horst"
"789": "Bob"

我试过了:

jq .[].name,keys < filter.json 

然而它给了我错误的输出:

"Horst"
"Bob"
[
  "123",
  "789"
]

但我不知道如何将这两个输出“合并”为一个。我哪里错了?

2 个答案:

答案 0 :(得分:3)

This question is similar我从那里得到了最好的答案,稍微调整一下以获得以下内容。

$ jq 'to_entries[]| {(.key): .value.name}' < /tmp/filter.json
{
  "123": "Horst"
}
{
  "789": "Bob"
}

答案 1 :(得分:0)

$ jq -r 'keys[] as $key | "\"\($key)\": \"\(.[$key].name)\""

产生

"123": "Horst"
"789": "Bob"