Json
使用 jq 從 json 數據中獲取特定字元串
我只想要
with
下面的範例文件。這僅供參考,不能在此處粘貼公司程式碼,因為它在安全環境中執行,因此不允許,但我的問題有點相似。我必須從值中獲取特定的字元串。請幫忙
{ "id": "0001", "type": "donut", "name": "Cake", "ppu": 0.55, "batters": { "batter": [ { "id": "1001", "type": "Regular" }, { "id": "1002", "type": "Chocolate" }, { "id": "1003", "type": "Blueberry" }, { "id": "1004", "type": "Devil's Food" } ] }, "topping": [ { "id": "5001", "type": "None" }, { "id": "5002", "type": "Glazed" }, { "id": "5005", "type": "Sugar" }, { "id": "5007", "type": "Powdered Sugar" }, { "id": "5006", "type": "**Chocolate with Sprinkles**" }, { "id": "5003", "type": "Chocolate" }, { "id": "5004", "type": "Maple" } ] }
jq -r '.topping[] | select(.id == "5006").type / " " | .[1]' file.json
這將選擇數組中等於字元串的數組元素
topping
,id
並從中5006
提取type
鍵的值。然後它將該值拆分為空格並提取第二個生成的單詞。這被輸出,解碼,到標準輸出。如果
/ " "
看起來很有趣,您可以用 替換該部分| split(" ")
,它的作用更明確。或者| scan("\\S+")
提取非空白字元的序列,以防字元串中有前導或尾隨空格,或除空格以外的其他空白字元或單詞之間的多個空白字元。如果您不確定該字元串在文件中的哪個位置,但它是一個對象的值
type
且id
等於該字元串5006
,那麼您可以使用jq -r '.. | select(.id? == "5006").type / " " | .[1]' file.json
這會遍歷所有值和鍵(因此效率非常低)並選擇任何
id
具有 value鍵的東西5006
。然後它就像上面最上面的變化一樣進行。
with
給定問題中的數據,任一表達式都會在標準輸出上生成單詞。