2017-01-06 15 views
0

私はこのように見えるCSVを持っています(下はヘッダー列とサンプル行です)。CSONをJSONArrayなしでJSONに変換するには?

UID MSA Latitude Longitude 
1 New York-Newark-Jersey City, NY-NJ-PA 40.7127837 -74.0059413 

これをJSONに変換します。 thisのようなサイトはJSONの配列に変換するため、私のためには機能しません。代わりに、私が望むのは、UIDというタイトルの一連のJSONオブジェクトです。これは、次のようになります(2番目のオブジェクトが最初のものとは異なるデータを装う)。

[ 
"1" : { 
"Latitude" : 40.7127837, 
"Longitude" : -74.0059413, 
"MSA" : "New York-Newark-Jersey City, NY-NJ-PA" 
}, 
"2" : { 
"Latitude" : 40.7127837, 
"Longitude" : -74.0059413, 
"MSA" : "New York-Newark-Jersey City, NY-NJ-PA" 
} 
] 

私のためにこれを実行できるツールはありますか?私はそれを行うスクリプトを書くことができますが、私はしたくありません。

+1

Perlのようなスクリプト言語が、あなたが探しているツールです。効果的にプログラミング言語に変わる前にテキスト変換ユーティリティにどれだけの柔軟性を与えることができるかには限界があります。 –

+0

Perlに具体的に言及する理由はありますか? Python、F#などは同様にうまくいくのだろうか? –

+0

私はPerlを知りました。私はその種の処理をあまりしないので、どの言語が最良かを教えてくれませんでした。 –

答えて

1

ここにはjqを使用する解決策があります。

filter.jqは、次のフィルタ

def parse: 
    [ 
     split("\n")[]   # split string into lines 
    | split("\t")    # split into columns 
    | select(length>0)  # eliminate blanks 
    ] 
; 
def makeobj($headers;$data): 
    [       # e.g. 
     [$headers, $data]  # [["MSA","LATITUDE","LONGITUDE"],["Savannah, GA"... 
    | transpose[]    # ["MSA","Savannah, GA"], ["LATITUDE","32.0835"] ... 
    | {key:.[0], value:.[1]} # {"key":"MSA","value":"Savannah, GA"} ... 
    ] | from_entries   # {"MSA":"Savannah, GA","LATITUDE":"32.0835",... 
    | .LATITUDE |= tonumber 
    | .LONGITUDE |= tonumber 
; 
def reorganize: 
    .[0] as $h    # save headers 
    | reduce .[1:][] as $r ( # construct final object result 
    {} 
    ; .[$r[0]] = makeobj($h[1:]; $r[1:]) 
    ) 
; 
parse | reorganize 

dataはタブ区切り

UID MSA LATITUDE LONGITUDE 
1 New York-Newark-Jersey City, NY-NJ-PA 40.7127837 -74.0059413 
2 Seattle, WA 47.6062 122.3321 
3 San Francisco, CA 37.7749 122.4194 
4 Savannah, GA 32.0835 81.0998 

が含まれている含まれている場合は、コマンド

$ jq -M -Rsr -f filter.jq data 

を生成
{ 
    "1": { 
    "MSA": "New York-Newark-Jersey City, NY-NJ-PA", 
    "LATITUDE": 40.7127837, 
    "LONGITUDE": -74.0059413 
    }, 
    "2": { 
    "MSA": "Seattle, WA", 
    "LATITUDE": 47.6062, 
    "LONGITUDE": 122.3321 
    }, 
    "3": { 
    "MSA": "San Francisco, CA", 
    "LATITUDE": 37.7749, 
    "LONGITUDE": 122.4194 
    }, 
    "4": { 
    "MSA": "Savannah, GA", 
    "LATITUDE": 32.0835, 
    "LONGITUDE": 81.0998 
    } 
} 
+0

私はすでに私の問題を解決しましたが、これは他の人にとっては正しいとマークしました:) –

1

このプロセスを自動化する方法を探しているとは限りません。

This siteあなたが探しているものが表示される場合があります。出力フォーマットにJSON-Dictionaryを選択する必要があります。

UID MSA LATITUDE LONGITUDE 
1 New York-Newark-Jersey City, NY-NJ-PA 40.7127837 -74.0059413 
2 Seattle, WA 47.6062 122.3321 
3 San Francisco, CA 37.7749 122.4194 
4 Savannah, GA 32.0835 81.0998 


Output: 
{ 
    "1": { "MSA":"New York-Newark-Jersey City, NY-NJ-PA", "LATITUDE":40.7127837, "LONGITUDE":-74.0059413}, 
    "2": { "MSA":"Seattle, WA", "LATITUDE":47.6062, "LONGITUDE":122.3321}, 
    "3": { "MSA":"San Francisco, CA", "LATITUDE":37.7749, "LONGITUDE":122.4194}, 
    "4": { "MSA":"Savannah, GA", "LATITUDE":32.0835, "LONGITUDE":81.0998} 
} 

ここでは、私がテストしたtest.csvをダウンロードできます。

+0

いい感じで他の都市を見上げています。 –

+0

タクス、それは私のOCDだと思います。 –

関連する問題