我在 json 檔案中有下面的 json 內容,下面 json 中的“pos”值是一個變數,需要用像 NNNN 這樣的常量替換它。
{
"qual_table": "TKGGU1.TCUSTORD",
"op_type": "INSERT",
"op_ts": "YYYY-MM-DDTHH:MI:SS.FFFFFFZ",
"pos": "G-AAAAAJcRAAAAAAAAAAAAAAAAAAAHAAoAAA==10687850.2.31.996",
"xid": "0.2.31.996",
"after": {
"CUST_CODE": "BILL",
"ORDER_DATE": "YYYY-MM-DD:HH:MI:SS",
"PRODUCT_CODE": "CAR",
"ORDER_ID": 765,
"PRODUCT_PRICE": 1500000,
"PRODUCT_AMOUNT": 3,
"TRANSACTION_ID": 100
}
}
我試過perl -i -pe 's/[A-Z]-[A-Z]*\.==*/ NNNN/g' filename.json了,但這不起作用。
你能給我推薦一個正則運算式嗎?請注意這是一個變數,每次都有不同的長度。
uj5u.com熱心網友回復:
jq是從腳本和命令列處理 JSON 的事實上的標準工具。它使使用新值更新物件的欄位變得微不足道:
$ jq '.pos = "NNNN"' input.json
{
"qual_table": "TKGGU1.TCUSTORD",
"op_type": "INSERT",
"op_ts": "YYYY-MM-DDTHH:MI:SS.FFFFFFZ",
"pos": "NNNN",
"xid": "0.2.31.996",
"after": {
"CUST_CODE": "BILL",
"ORDER_DATE": "YYYY-MM-DD:HH:MI:SS",
"PRODUCT_CODE": "CAR",
"ORDER_ID": 765,
"PRODUCT_PRICE": 1500000,
"PRODUCT_AMOUNT": 3,
"TRANSACTION_ID": 100
}
}
(請注意,當標準輸出是管道或檔案或終端以外的其他東西時,JSON 以緊湊的形式列印在一行上。)
等效的 perl one(ish)-liner 將類似于
perl -MJSON::MaybeXS -MFile::Slurper=read_text -E '
my $json = JSON::MaybeXS->new;
my $obj = $json->decode(read_text($ARGV[0]));
$obj->{pos} = "NNNN";
say $json->encode($obj);' input.json
(根據您喜歡的 JSON 和檔案讀取模塊的需要進行調整)
uj5u.com熱心網友回復:
perl -pe 's/"pos"\s*:\s*"\K[^"]*/NNNN/g' filename.json
pos只要字串中沒有引號字符或換行符,它就應該適用于任何長度。
正如 Shawn 所指出的,最好使用 json 操作工具而不是字串操作工具。否則你將不得不依賴假設。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/494021.html
