kullanarak dicts dizisinde bir değer güncelleştirin Bir dict değerinde bir değeri güncellemek istiyorum, ki bu yalnızca dict içindeki başka bir değerle tanımlayabilirim. Umarım bu işe buldukjq
[
{
"format": "geojson",
"id": "foo"
},
{
"format": "geojson",
"id": "bar"
},
{
"format": "csv",
"id": "baz"
}
]
: Ben csv ' 'formatında eşlik s' baz
değiştirmek istediğiniz
[
{
"format": "geojson",
"id": "foo"
},
{
"format": "geojson",
"id": "bar"
},
{
"format": "zip",
"id": "baz"
}
]
: Yani, bu girdi verilir
jq 'map(if .id=="baz" then .format="csv" else . end)' my.json
Ama Bu oldukça ayrıntılı görünüyor, bu yüzden bunu ifade etmek için daha zarif bir yol olup olmadığını merak ediyorum. jq bir çeşit ifade seçici eksik gibi görünüyor, xpath [@id='baz']
eşdeğeri olabilir.
(Bu soruyu başladığımda ben map
keşfetti, sonra [.[] |...]
vardı, yüzden ben sandığı kadar kötü değil.)
Ah ha az docs son bölümüne bakın. Bence gereksiz boru var (sanırım). Yani şöyle olabilir: 'jq '(. [] | Select (.id ==" baz ") .format) | =" csv "' my.json' –
Başka bir varyasyon:' map (select (.id == ") corangamite ") biçim | =" csv ") –
evet, iyi bir; 'Map' kullanarak bir varyant ekledim; Ihmal edilmiş boru ile notasyon hakkında emin değilim –