需要帮助在终端中使用 jq 解析 JSON 结构

Need help parsing JSON structure using jq in Terminal

我有以下格式的 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"}
                 },
              ]
}

我想要做的是 select 只有一些来自层次结构中不同位置的项目,如下所示:

{ “产品”:{ “A_key1”:“valueA1”,“A_key3”:{“keyA3y_nested”:“valueA3y_nested”} “B_key1": "valueB1", "B_key3": {"keyB3y_nested": "valueB3y_nested"} } }

到目前为止,我可以在命令提示符下执行此操作: 卷曲 https://sample_api | jq'{产品:.产品[0]}'

^ returns “A” 的整个对象,其中包括 A 的所有 3 个键,但我如何才能 select 从层次结构的较低层有效地提取信息?

谢谢。

此代码应该适合您:

curl https://sample_api | \
jq -r '(.product[0] | .A_key1, .A_key3.keyA3y_nested),
       (.product[1] | .B_key1, .B_key3.keyB3y_nested)'

希望这能达到您的预期:

#!/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