簡體   English   中英

使用jq更新dicts數組中的一個值

[英]Update one value in array of dicts, using jq

我想更新dict中的值,我只能通過dict中的另一個值來識別。 也就是說,鑒於此輸入:

[
  {
    "format": "geojson",
    "id": "foo"
  },
  {
    "format": "geojson",
    "id": "bar"
  },
  {
    "format": "zip",
    "id": "baz"
  }
]

我想將baz的伴隨格式改為'csv':

[
  {
    "format": "geojson",
    "id": "foo"
  },
  {
    "format": "geojson",
    "id": "bar"
  },
  {
    "format": "csv",
    "id": "baz"
  }
]

我發現這有效:

jq 'map(if .id=="baz" then .format="csv" else . end)' my.json

但這看起來相當冗長,所以我想知道是否有一種更優雅的方式來表達這一點。 jq似乎缺少某種表達式選擇器,相當於xpath中的[@id='baz']

(當我開始這個問題時,我有[.[] |...] ,然后我發現了map ,所以它並沒有我想象的那么糟糕。)

您正在尋找復雜的作業:

jq '(.[] | select(.id == "baz") | .format) |= "csv"' my.json

也許不會更短,但要求更優雅。 請參閱文檔的最后一部分: http//stedolan.github.io/jq/manual/#Assignment

編輯:使用map

jq 'map((select(.id == "baz") | .format) |= "csv")' my.json 

暫無
暫無

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

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