如果我有一个带有可变键名的JSON文件,请执行以下操作:
{
"john": {"age": 40, "nickname": "jo"},
"mary": {"age": 50, "nickname": "mo"}
}
如何使用jq
提取带有某些值的键?
示例:提取姓名及其年龄:
"john": 40
"mary": 50
答案 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"