我有以下格式的 JSON 代碼,但我無法弄清楚如何使用 JQ 從串列中物件內的嵌套字典中呼叫資訊 - 如果這有意義的話。該串列是最高字典的整個值。這是結構的示例:
{ "product" : [ { "A_key1" : "valueA1",
"A_key2" : "valueA2",
"A_key3" : {"keyA3x_nested" : "valueA3x_nested", "keyA3y_nested" : "valueA3y_nested"}
},
{ "B_key1" : "valueB1",
"B_key2" : "valueB2",
"B_key3" : {"keyB3x_nested" : "valueB3x_nested", "keyB3y_nested" : "valueB3y_nested"}
},
]
}
我想要做的是僅從層次結構中的不同位置選擇一些專案,如下所示:
{ "product": { "A_key1": "valueA1", "A_key3": {"keyA3y_nested": "valueA3y_nested"} "B_key1": "valueB1", "B_key3": {"keyB3y_nested": "valueB3y_nested"} } }
到目前為止,我可以在命令提示符下執行此操作: curl https://sample_api | jq '{產品:.product[0]}'
^ 這將回傳“A”的整個物件,其中包括 A 的所有 3 個鍵,但是我如何從層次結構的較低層有選擇地提取資訊?
謝謝你。
uj5u.com熱心網友回復:
這段代碼應該適合你:
curl https://sample_api | \
jq -r '(.product[0] | .A_key1, .A_key3.keyA3y_nested),
(.product[1] | .B_key1, .B_key3.keyB3y_nested)'
uj5u.com熱心網友回復:
希望這能達到您的期望:
#!/bin/bash
jq '. as $root | null '"$(jq -nr '
def spread_paths($array):
reduce $array[] as $element ([];
. (if ($element|type) == "object"
then ($element | to_entries | map(.key spread_paths(.value)[]) )
else [$element] end)
);
spread_paths([
{".product[0].": ["A_key1", "A_key3.keyA3y_nested"]},
{".product[1].": ["B_key1", "B_key3.keyB3y_nested"]}
])[] | "|\(.)=$root\(.)"
') | map_values(.|add)" input-file
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/393539.html
