所以我试图用jq。
取出一些JSON以下是一个例子:
{
"limit":10,
"offset":20,
"values": [
{
"id": "abcd"
"type": "file"
"users": {
"total": 2,
"profiles": [
{
"first_name": "John",
"last_name": "Smith"
},
{
"first_name": "Sue",
"last_name": "Johnson"
}
]
}
},
{
"id": "efgh"
"type": "folder"
"users": {
"total": 1,
"profiles": [
{
"first_name": "Steve",
"last_name": "Gold"
}
]
}
},
]
}
我希望在我的结果中获得以下内容
limit:10
offset:20
id:abcd, type:file, [users.total:2, users.profiles.first_name: [John, Sue], users.profiles.last_name: [Smith, Johnson]],
id:efgh, type:folder, [users.total:1, users.profiles.first_name: [Steve], users.profiles.last_name: [Gold]],
我知道我可以把它传给jq,但我不知道怎么做。我可以轻松地在数组中获取内容,但我似乎无法弄清楚如何执行此操作并添加顶级元素。所以它的限制是'和'抵消'这让我很适合。
我可以得到一些东西
jq ".values[] | .users.total, .users[].first_name, .users[].last_name"
但我似乎无法弄清楚如何添加限制和偏移量。
答案 0 :(得分:2)
您可以在顶层使用逗号来获取这些字段。使用括号对从.values
获取所有内容的表达式进行分组。
jq '.limit, .offset, (.values[] | .id, .type, .users.total, .users.profiles[].first_name, .users.profiles[].last_name)'
答案 1 :(得分:0)
所以它的限制'和'抵消'这让我很适合。
看起来to_entries
可能是您正在寻找的内容。例如,考虑一下:
to_entries[]
| select(.value | type != "array")
| [.key, .value]
| join(": ")
使用您的JSON,这会产生您遇到困难的行,而不会明确提及键名:
limit: 10
offset: 20
然后你可以(例如)使用逗号运算符(,
)来生成你想要的其他行。