如何使用jq从JSON中提取变量键及其值?

时间:2018-05-23 19:06:53

标签: json jq

如果我有一个带有可变键名的JSON文件,请执行以下操作:

{   
    "john": {"age": 40, "nickname": "jo"},
    "mary": {"age": 50, "nickname": "mo"}
}

如何使用jq提取带有某些值的键?

示例:提取姓名及其年龄:

"john": 40
"mary": 50

3 个答案:

答案 0 :(得分:3)

在您提到的特定情况下,可以使用以下过滤器:

to_entries[] | "\"\(.key)\": \(.value.age)"

在输入中使用-r命令行选项(例如jq -rf program.jq)会产生:

"john": 40
"mary": 50

另见:

Recursive extraction of object values and parent key name using jq

答案 1 :(得分:1)

试试这个:

to_entries[] | {(.key): .value.age}

输出:

{
  "john": 40
}
{
  "mary": 50
}

答案 2 :(得分:0)

首先将对象转换为键/值对数组;然后你可以迭代它并串联访问密钥和相关值。

$ jq 'to_entries' tmp.json
[
  {
    "key": "john",
    "value": {
      "age": 40,
      "nickname": "jo"
    }
  },
  {
    "key": "mary",
    "value": {
      "age": 50,
      "nickname": "mo"
    }
  }
]
$ jq 'to_entries[] | "\(.key): \(.value.age)"' tmp.json
"john: 40"
"mary: 50"
相关问题