予測データを含む一部のjsonをcsv(gnuplot用)に変換する必要があります。いくつかのjson2csvユーティリティを試してみました。
JSONサンプル:
{"cod":"200","message":0.006,"cnt":40,"list":[{"dt":1519333200,"main":{"temp":271.62,"temp_min":271.62,"temp_max":272.921,"pressure":1028.3,"sea_level":1037.2,"grnd_level":1028.3,"humidity":88,"temp_kf":-1.3},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"clouds":{"all":0},"wind":{"speed":4.86,"deg":78.004},"rain":{},"snow":{},"sys":{"pod":"n"},"dt_txt":"2018-02-22 21:00:00"},{"dt":1519344000,"main":{"temp":271.22,"temp_min":271.22,"temp_max":272.193,"pressure":1028.11,"sea_level":1037.04,"grnd_level":1028.11,"humidity":100,"temp_kf":-0.98},"weather":[{"id":800,"main":"Clear","description":"clear sky","icon":"01n"}],"clouds":{"all":0},"wind":{"speed":4.52,"deg":80.0016},"rain":{},"snow":{},"sys":{"pod":"n"},"dt_txt":"2018-02-23 00:00:00"},
また美しい印刷:
{
"cod": "200",
"message": 0.006,
"cnt": 40,
"list": [
{
"dt": 1519333200,
"main": {
"temp": 271.62,
"temp_min": 271.62,
"temp_max": 272.921,
"pressure": 1028.3,
"sea_level": 1037.2,
"grnd_level": 1028.3,
"humidity": 88,
"temp_kf": -1.3
},
"weather": [
{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01n"
}
],
"clouds": {
"all": 0
},
"wind": {
"speed": 4.86,
"deg": 78.004
},
"rain": {},
"snow": {},
"sys": {
"pod": "n"
},
"dt_txt": "2018-02-22 21:00:00"
},
{
"dt": 1519344000,
"main": {
"temp": 271.22,
"temp_min": 271.22,
"temp_max": 272.193,
"pressure": 1028.11,
"sea_level": 1037.04,
"grnd_level": 1028.11,
"humidity": 100,
"temp_kf": -0.98
},
"weather": [
{
"id": 800,
"main": "Clear",
"description": "clear sky",
"icon": "01n"
}
],
"clouds": {
"all": 0
},
"wind": {
"speed": 4.52,
"deg": 80.0016
},
"rain": {},
"snow": {},
"sys": {
"pod": "n"
},
"dt_txt": "2018-02-23 00:00:00"
},
私はjson2csvを使用してデータを平坦化し、最初のいくつかの不要なフィールドを削除しました。
1519333200 271.62 271.62 272.921 1028.3 1037.2 1028.3 88 -1.3 800 "Clear" "clear sky" "01n" 0 4.86 78.004 "{}" "{}" "n"
"2018-02-22 21:00:00" 1519344000 271.22 271.22 272.193 1028.11 1037.04 1028.11 100 -0.98 800 "Clear" "clear sky" "01n" 0 4.52 80.0016 "{}" "{}"
"n" "2018-02-23 00:00:00"
プレーンテキストの日付(sed??)の後に新しい行を作成するか、理想的にはjsonをcsvに直接平面化する必要があります。
ベストアンサー1
正規表現はsed
このタイプの操作には適していませんが、使用するのは非常に簡単です。jq
、JSON処理ツール:
$ jq -r '.list[]|[.dt, .main[]] | @csv' < data.json
1519333200,271.62,271.62,272.921,1028.3,1037.2,1028.3,88,-1.3
1519344000,271.22,271.22,272.193,1028.11,1037.04,1028.11,100,-0.98
jq
JSONデータストリームを受け取り、それをフィルタリングして、sed
テキストではなく構造化データに似た必須データを抽出します。このコマンドでは「リスト」配列の各要素(.list[]
)そして「dt」フィールドを削除します(.dt
)。~の内部のものそして、「メイン」オブジェクト(.main[]
)のすべての項目を配列に配置してから、オブジェクト全体を配列します。CSV行に変換( @csv
)。
特定のフィールドに興味がある場合、または順序を変更したい場合は、そのフィールドを一覧表示することもできます。
$ jq -r '.list[]|[.dt, .main.temp_min, .main.humidity] | @csv' < data.json
1519333200,271.62,88
1519344000,271.22,100
興味のある項目を1つずつ一覧表示し、残りの項目は無視してください。
データの他の部分について知りたい場合は、ここに入れることもできます。.clouds
そのフィールドを調べるclouds
か、次のコマンドを使用して風速フィールドを読み取ることができます.wind.speed
。または、常に名前の前に - を使用できます。これはjq
かなり包括的です必要なカスタム動作のため。