次のデータを含むログファイルがあり、user.txt
それをjson形式に変換したいと思います。
{"user":"Demo Admin","user_id":"57c4718434243dc47d8b456c","org_id":"57c4718434243dc47d8b456b","superuser_id":null,"superuser_name":null,"application":"Trackier Webapp","method":"GET","ip":"43.249.54.66","domain":"demo.trackier.com","url":"https:\/\/demo.trackier.com\/admin.html","created":"2022-09-08 06:19:18","@timestamp":"2022-09-08T06:19:18Z"}
{"user":"Demo Admin","user_id":"57c4718434243dc47d8b456c","org_id":"57c4718434243dc47d8b456b","superuser_id":null,"superuser_name":null,"application":"Trackier Webapp","method":"GET","ip":"43.249.54.66","domain":"demo.trackier.com","url":"https:\/\/demo.trackier.com\/admin.html","created":"2022-09-08 06:19:35","@timestamp":"2022-09-08T06:19:35Z"}
答え1
1行に1つのjsonを持つファイルをjson配列に変換すると仮定すると、次のようになります。
sed '1s/^/[/;$s/$/]/;$!s/$/,/' < file.multijson > file.json
[
最初の行の先頭、]
最後の行の終わり、,
最後の行を除くすべての部分の終わりに挿入されます。
存在する場合は、jq
次のこともできます。
jq -s < file.multijson > file.json
(単純な形式のために追加されました-c
)しかし、数字(例えば1e1または10.0000000000000001を10に変更)または文字列(例えば"\u00e9"
に変更"é"
)の形式を再指定することができます。