列のデータをjsonに変換する

列のデータをjsonに変換する

私のテキストファイルのデータ形式は次のとおりです。

alex street1 253465873 [email protected]
john street2 442893646 [email protected]
kevin street3 125234763 [email protected]

このデータをヘッダー付きのjson形式に変換する必要があります。 "name" "street" "phone" "e-mail"

答え1

あなたは読むことができます元の入力次のようにスペースで区切られたフィールドに分割しますjq

$ cat file.txt | 
    jq -nR '[inputs | split(" ") | { "name": .[0], "street": .[1], "phone": .[2], "e-mail": .[3] }]'
[
  {
    "name": "alex",
    "street": "street1",
    "phone": "253465873",
    "e-mail": "[email protected]"
  },
  {
    "name": "john",
    "street": "street2",
    "phone": "442893646",
    "e-mail": "[email protected]"
  },
  {
    "name": "kevin",
    "street": "street3",
    "phone": "125234763",
    "e-mail": "[email protected]"
  }
]

または、単純な(ネストされていない)表形式データの場合は、次のものを使用できます。ミラー

mlr --inidx --ojson --jvstack rename '1,name,2,street,3,phone,4,e-mail' file.txt

答え2

$ column --table --separator=" " --table-columns name,street,phone,email --json test.txt

{
   "table": [
      {
         "name": "alex",
         "street": "street1",
         "phone": "253465873",
         "email": "[email protected]"
      },{
         "name": "john",
         "street": "street2",
         "phone": "442893646",
         "email": "[email protected]"
      },{
         "name": "kevin",
         "street": "street3",
         "phone": "125234763",
         "email": "[email protected]"
      }
   ]
}

答え3

使用ミラーmlr)ヘッダーがなく、スペースで区切られたデータをJSONに変換します。

$ mlr --n2j label name,street,phone,e-mail file
{ "name": "alex", "street": "street1", "phone": 253465873, "e-mail": "[email protected]" }
{ "name": "john", "street": "street2", "phone": 442893646, "e-mail": "[email protected]" }
{ "name": "kevin", "street": "street3", "phone": 125234763, "e-mail": "[email protected]" }

出力は、各入力レコードの個別のJSONオブジェクトです。このオプションは、(「入力は暗黙の整数インデックス(nidx)です」)と(「出力はJSONです」)の略語です--n2j--inidx--ojson

このlabelサブコマンドはフィールド名を順番に変更します。

結果オブジェクトセットを配列にラップするには、次のようにします--jlistwrap

$ mlr --n2j --jlistwrap label name,street,phone,e-mail file
[
{ "name": "alex", "street": "street1", "phone": 253465873, "e-mail": "[email protected]" }
,{ "name": "john", "street": "street2", "phone": 442893646, "e-mail": "[email protected]" }
,{ "name": "kevin", "street": "street3", "phone": 125234763, "e-mail": "[email protected]" }
]

答え4

次のawkコマンドを試してください。

$ awk '{for (i=1;i<=NF;i++){$i="\""$i"\"";printf $i" "}};{printf"\n"}' infile

"alex" "street1" "253465873" "[email protected]" 
"john" "street2" "442893646" "[email protected]" 
"kevin" "street3" "125234763" "[email protected]"

関連情報