簡體   English   中英

用jq解析嵌套的json

[英]Parsing nested json with jq

我正在解析嵌套的json,以從json響應中獲取特定值。 json響應如下:

{ 
"custom_classes": 2,
"images": 
    [ 
      { 
        "classifiers": 
        [ 
          { 
            "classes": 
            [ 
              { 
                "class": "football",
                "score": 0.867376 
              } 
            ], 
            "classifier_id": "players_367677167",
            "name": "players" 
          } 
        ], 
        "image": "1496A400EDC351FD.jpg" 
      } 
    ], 
"images_processed": 1 
}

從類images => classifiers => classes:“ class”和“ score”是我要保存在csv文件中的值。 我發現了如何將結果保存到csv文件中。 但是我無法單獨解析images 我可以得到custom_classesimage_processed

我正在使用jq-1.5

我嘗試過的不同命令:

curl "Some address"| jq '.["images"]'
curl "Some address"| jq '.[.images]'
curl "Some address"| jq '.[.images["image"]]'

在大多數情況下,錯誤是關於無法對數組images進行索引。

有什么提示嗎?

我必須說,我不太擅長jq ,所以所有這些數組迭代都可能以某種方式被簡化,但這產生了您提到的值:

cat foo.json | jq ".[] | .images | .[] | .classifiers | .[] | .classes | .[] | .[]"

如果您也想要按鍵,則只需省略最后一個.[]即可。

編輯 @chepner在評論中指出,確實可以將其簡化為

cat foo.json | jq ".images[].classifiers[].classes[] | [.class, .score] | @csv "

jq解決方案以獲得准備好的csv記錄:

jq -r '.images[0].classifiers[0].classes[0] | [.class, .score] | @csv' input.json

輸出:

"football",0.867376

根據數據的不同,使用遞歸下降:..的 對象可能具有以下功能

.. | objects | select(has("class")) | [.class,.score] | @csv

樣本運行(假設data.json數據)

$ jq -Mr '.. | objects | select(has("class")) | [.class,.score] | @csv' data.json
"football",0.867376

在jqplay.org上在線嘗試

這是使用路徑getpath的另一個變體

getpath( paths(has("class")?) ) | [.class,.score] | @csv

在jqplay.org上在線嘗試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM