第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在所有文件中查找 JSON 鍵并移除對(duì)應(yīng)的鍵值對(duì)

在所有文件中查找 JSON 鍵并移除對(duì)應(yīng)的鍵值對(duì)

函數(shù)式編程 2022-10-18 19:42:58
我有很多文件需要在其中找到一個(gè)字符串,如果該字符串存在,那么我需要從所有這些文件中刪除該字符串周?chē)?json 塊。例如:我正在尋找這個(gè)字符串 -"1234"在我的所有文件中。每個(gè)文件都有一個(gè)巨大的 json 塊,其中包含我要?jiǎng)h除的字符串。所以在所有這些文件中,字符串如下兩種格式:第一種格式是:..."data": {    "1234": {        "tt": true    }}...數(shù)據(jù)中包含多個(gè) json 對(duì)象的第二種格式:..."data": {    "1234": {        "tt": true    },    "7890": {        "tt": true    }}...現(xiàn)在我需要想出一些可以"1234"完全刪除 json 對(duì)象的腳本。所以輸出應(yīng)該是:對(duì)于第一種格式:..."data": {}...對(duì)于第二種格式:..."data": {    "7890": {        "tt": true    }}...這可能嗎?我在mac linux終端。我可以進(jìn)行 grep 搜索并找到文件,但不確定如何從所有文件中刪除該字符串周?chē)?json 對(duì)象。注意:每個(gè) json 文件的格式都很漂亮。
查看完整描述

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í)際輸入/輸出而不是摘錄的情況下,這是我所能得到的。


希望這可以幫助!


查看完整回答
反對(duì) 回復(fù) 2022-10-18
?
慕后森

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上面顯示的程序。


查看完整回答
反對(duì) 回復(fù) 2022-10-18
  • 2 回答
  • 0 關(guān)注
  • 113 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)