Debian

將純數據轉換為 json 文件

  • June 10, 2017

每個人。我對 linux 還是很陌生,在閱讀這個網站的所有人中,我學到了很多東西。我的會計程序有點麻煩,這就是為什麼我要經常找你。我想將我的數據從純文字移動到 json,我相信這會給我帶來更好的結果和更大的靈活性。

我有一個文件夾,其中包含分隔文件中的資訊。文件是這樣的:

20170404
pago
80051442-4
002-001-0080057
310000


310000
si
2017-06-05

我想將此資訊複製到新文件中,其中每一行都是一個新的 json 欄位。像這樣的東西:

{
"field1":"20170404",
"field2":"pago",
"field3":"80051442-4",
"field4":"002-001-0080057",
"field5":"310000"
"field6":"",
"field7":"";
"field8":"310000"
"field9":"si"
"field10":"2017-06-05"
}

我正在尋找一個腳本來讀取整個目錄並建構這些新文件:oldfile.json。

之後,我想在不同的列中標記其中幾個文件的結果:

file1    field1    field2    field3   field4    field5    field6    field7
file2    field1    field2    field3   field4    field5    field6    field7
file3    field1    field2    field3   field4    field5    field6    field7
file4    field1    field2    field3   field4    field5    field6    field7
file5    field1    field2    field3   field4    field5    field6    field7

謝謝大家的時間。

回答第二部分 - 將 json 文件轉換為表格。

用法: ./json_to_table.sh *.json

#!/bin/bash

for i in "$@"; do
   file_content=$(sed -n 's/".*":"\(.*\)",\?/\1/p' "$i" | tr '\n' ' ')
   printf "%s %s\n" "$i" "$file_content"
done | column -t

如果您不需要漂亮的表格格式,那麼您可以刪除 | column -t部分(在底部,之後done)。然後行的欄位將被一個空格分隔,因此,每個欄位都有自己的寬度。它適用於程序解析,例如awk, sed,但不方便人類閱讀。

注意: json 文件中的每條記錄後,除了最後一條,都應該是逗號。我的意思是說:

"field8":"310000", <- here
"field9":"si", <-here
"field10":"2017-06-05" <- not here. Last record without comma.
}

我會使用jq工具(一個適當的 JSON 解析/操作工具)來解決這個問題:

for f in *; do
   jq -R -s 'rtrimstr("\n") | split("\n") | to_entries | reduce .[] as $o ({}; .["field" + ($o.key+1|tostring)] |= $o.value )' "$f" > "$f".json; 
done

  • -R( --raw-input) 與-s( ) 結合--slurp- 將整個輸入作為單個長字元串傳遞給過濾器

引用自:https://unix.stackexchange.com/questions/370032