Json

使用 jq 從 json 數據中獲取特定字元串

  • May 25, 2021

我只想要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

這將選擇數組中等於字元串的數組元素toppingid並從中5006提取type鍵的值。然後它將該值拆分為空格並提取第二個生成的單詞。這被輸出,解碼,到標準輸出。

如果/ " "看起來很有趣,您可以用 替換該部分| split(" "),它的作用更明確。或者| scan("\\S+")提取非空白字元的序列,以防字元串中有前導或尾隨空格,或除空格以外的其他空白字元或單詞之間的多個空白字元。

如果您不確定該字元串在文件中的哪個位置,但它是一個對象的typeid等於該字元串5006,那麼您可以使用

jq -r '.. | select(.id? == "5006").type / " " | .[1]' file.json

這會遍歷所有值和鍵(因此效率非常低)並選擇任何id具有 value鍵的東西5006。然後它就像上面最上面的變化一樣進行。

with給定問題中的數據,任一表達式都會在標準輸出上生成單詞。

引用自:https://unix.stackexchange.com/questions/651144