[英]Selecting a subset of properties from nested array of objects
我有一個深度嵌套的對象數組,我試圖從中提取鍵和值的子集。
[
{
"x": {
"y": {
"description": "jq rocks",
"z": [
{
"data_1": 123,
"data_2": [
{
"field_1": true,
"field_2": "hello",
"field_3": "red"
}
]
},
{
"data_1": 123,
"data_2": [
{
"field_1": true,
"field_2": "goodbye",
"field_3": "blue"
}
]
},
{
"data_1": 123
}
]
}
}
}
]
我正在嘗試提取 field_2 和 field_3,以及其他一些字段,但我遇到的問題是它似乎結合了 field_2 和 field_3 的所有可能組合。
我目前使用的 jq 是
jq '.[] | {
"description": .x.y.description,
"subset": [{
"f_2": .x.y.z[].data_2[]?.field_2,
"f_3": .x.y.z[].data_2[]?.field_3
}]
}' tmp.json
使用上面的示例時,它會在數組中返回 4 個條目,而不僅僅是兩個。
"subset": [
{
"f_2": "hello"
"f_3": "red"
}
{
"f_2": "hello"
"f_3": "blue"
}
{
"f_2": "goodbye"
"f_3": "red"
}
{
"f_2": "goodbye"
"f_3": "blue"
}
]
如何強制 jq 處理 data_2 數組中的每個 object 一次?
您可以使用以下內容:
.[].x.y | { description, subset: [.z[].data_2[]? | { f_2: .field_2, f_3: .field_3 }] }
您的問題源於基於同一 object 中的兩次迭代定義兩個字段。 [{foo: .xyz[].data_2[]?.field_2}]
返回兩個項目,但是[{foo: .xyz[].data_2[]?.field_2, bar: .xyz[].data_2[]?.field_3}]
返回 4。分解迭代可以解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.