我有一個包含數千行和 90 個 json 物件的 json 檔案。每個物件都具有以下結構:
{
"country_codes": [
"GB"
],
"institution_id": "ins_118309",
"name": "Barclaycard (UK) - Online Banking: Personal", // I want to extract this line only
"oauth": true,
"products": [
"assets",
"auth",
"balance",
"transactions",
"identity",
"standing_orders"
],
"routing_numbers": []
},
對于九十個物件,我想洗掉所有行,只保留一個帶有機構名稱的行。
我想我將不得不在這里使用正則運算式?我很樂意與 vim、sublime、vscode 或任何其他允許我這樣做的代碼編輯器一起使用
如何提取這些行,以便保留以下 90 行?
"name": "Barclaycard (UK) - Online Banking: Personal",
"name": "Metro Bank - Commercial and Business Online Plus",
...
...
"name": "HSBC (UK) - Business",
uj5u.com熱心網友回復:
如果你必須使用代碼編輯器,那么在 Vim 中你可以洗掉所有與模式不
匹配的行::v/^\s*"name":/d
上面的模式說:
^行以\s*零個或多個空格"name": 很好解釋
盡管最好使用專用工具來決議 json 檔案而不是正則運算式,因為json 不是“常規語言”。
獎金
如果您最終在 Vim 中執行此操作,您可以將所有行左對齊,do:%left甚至只是:%le.
uj5u.com熱心網友回復:
你最終可以使用 grep :
grep '^\s*"name":' your_file.json
uj5u.com熱心網友回復:
這聽起來不像是文本編輯器甚至正則運算式的作業。如何為作業使用正確的工具??
# print only the desired fields to stdout
$ jq '.[] | .name' < in.json
# write only the desired fields to file
$ jq '.[] | .name' < in.json > out.json
請參閱https://stedolan.github.io/jq/。
如果您真的想從文本編輯器中進行操作,最簡單的方法仍然是通過專門的外部工具過濾當前緩沖區。在 Vim 中,它看起來像這樣:
:%!jq '.[] | .name'
見:help filter。
FWIW,這是另一個適合作業的工具?:
:%!jj \\#.name -l
請參閱https://github.com/tidwall/jj。
uj5u.com熱心網友回復:
在 VSC 中
- 選擇
institution_id - 執行選擇>選擇所有出現
Arrow LeftCtrl XEscCtrl V
uj5u.com熱心網友回復:
在 vscode 中(盡管我認為任何正則運算式處理編輯器都是一樣的),使用這個 Find:
^(?!\s*"name":.*).*\n?|^\s*
并一無所有。請參閱regex101 演示。
^(?!\s*"name":.*).*\n?: 獲取所有不"name":...包含換行符的行,以便完全丟棄該行。
^\s*獲取之前的空格 "name":......- 也被丟棄,因為我們將所有匹配項都替換為空。
uj5u.com熱心網友回復:
在 Vim 中原生決議 JSON:
call getline(1, '$')
\ ->join("\n")
\ ->json_decode()
\ ->map({_, v -> printf('"name": "%s",', v.name)})
\ ->append('$')
注意。僅當從檔案中獲取腳本時,行繼續才可用。如果以互動方式運行,則在一行上鍵入命令。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/506612.html
