SQLクエリ出力でJSONを生成する

SQLクエリ出力でJSONを生成する

次のデータベースクエリがあります。

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"
    }
  ]
}

おすすめ記事