次のデータベースクエリがあります。
select hostname,size from tableinfo
出力は次のとおりです。
hostname size
------------------------- -----------
host1 28
host2 13
host3 79
host4 28
host5 17
または、次のようにすることができます。
host1 28
host2 13
host3 79
host4 28
host5 17
この出力をJSONに変換するシェルスクリプトを作成したいのですが、どこで始めるべきか、何をすべきかわかりません。 JSONは次のようになります。
{
"data":[
{ "{#HOSTNAME}":"host1", "{#SIZE}":"28" } ,
{ "{#HOSTNAME}":"host2", "{#SIZE}":"13" } ,
{ "{#HOSTNAME}":"host3", "{#SIZE}":"79" } ,
{ "{#HOSTNAME}":"host4", "{#SIZE}":"28" } ,
{ "{#HOSTNAME}":"host5", "{#SIZE}":"17" }
]
}
ベストアンサー1
jq
解決策:
<your sql output> | jq -Rs '{"data": [split("\n") | map(select(length > 0))[]
| split(" +";"g")
| {"{#HOSTNAME}": .[0], "{#SIZE}": .[1]}]}'
出力:
{
"data": [
{
"{#HOSTNAME}": "host1",
"{#SIZE}": "28"
},
{
"{#HOSTNAME}": "host2",
"{#SIZE}": "13"
},
{
"{#HOSTNAME}": "host3",
"{#SIZE}": "79"
},
{
"{#HOSTNAME}": "host4",
"{#SIZE}": "28"
},
{
"{#HOSTNAME}": "host5",
"{#SIZE}": "17"
}
]
}