2 回答

TA貢獻(xiàn)1863條經(jīng)驗(yàn) 獲得超2個(gè)贊
更新
鑒于更新的問(wèn)題,請(qǐng)看看這個(gè)
jq '{props: [.props[] | (select(.property == "Hat") | del(.data["1234"])), select(.property != "Hat")]}'
這只是 jq 表達(dá)式本身。要在文件夾等中的每個(gè)文件上運(yùn)行它,只需在下面的 bash 循環(huán)中替換它。
這個(gè)怎么樣 ...
jq 'delpaths([paths] | map(select(.[]=="1234")))'
第一個(gè)例子
輸入
{
"data": {
"1234": {
"tt": true
}
}
}
輸出
{
"data": {}
}
第二個(gè)例子
輸入
{
"data": {
"1234": {
"tt": true
},
"7890": {
"tt": true
}
}
}
輸出
{
"data": {
"7890": {
"tt": true
}
}
}
一個(gè)簡(jiǎn)單的 bash 腳本,用于在每個(gè)文件(例如 data-1.json)上運(yùn)行它并將其保存在適當(dāng)?shù)奈恢?.....
for file in *.json; do
jq 'delpaths([paths] | map(select(.[]=="1234")))' <"$file" >"$file.new" && mv "$file.new" "$file"
done
在沒(méi)有實(shí)際輸入/輸出而不是摘錄的情況下,這是我所能得到的。
希望這可以幫助!

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超5個(gè)贊
“1234”總是一個(gè)鍵,還是也可以是一個(gè)值?
它永遠(yuǎn)是一把鑰匙。– 龍 3 小時(shí)前
這是一個(gè)使用“walk/1”的簡(jiǎn)單直接的解決方案:
walk(if type == "object" then with_entries(select(.key != "1234")) else . end)
處理多個(gè)文件
多個(gè)文件的處理將取決于 (a) 文件的指定方式;(b) 您是否要覆蓋這些文件,如果是,是有條件還是無(wú)條件,如果不是,使用什么文件名。
簡(jiǎn)而言之,有多種變體。這是一個(gè)例子:
for f in *.json do jq -f -program.jq "$f" > "$f.new" done
其中 program.jq 包含walk
上面顯示的程序。
添加回答
舉報(bào)