2017-02-07 10 views
-2

Census APIから次のデータを文字列形式で取得しています。2次元配列の文字列を解析します。

[["NAME","B01001_001E","state","county","tract","block group"], 
["Block Group 1, Census Tract 1.10, Franklin County, Ohio","1165","39","049","000110","1"], 
["Block Group 2, Census Tract 1.10, Franklin County, Ohio","1038","39","049","000110","2"], 
["Block Group 3, Census Tract 1.10, Franklin County, Ohio","551","39","049","000110","3"], 
["Block Group 4, Census Tract 1.10, Franklin County, Ohio","881","39","049","000110","4"]] 

このデータをリスト、またはおそらく列名を使用するDataTableに解析するにはどうすればよいでしょうか?

私は自分のパーサーを作成しています(分割などを使用しています)が、データを直接解析する簡単な方法があることを期待しています。 JSONシリアライザは、jsonデータではないため、機能しません(キーと値のペアはありません)。

ありがとう!

あなただけ Json.NET (結局のところ、it's valid JSONを使用することができます
+1

これはcsvです! ''、 ''によって分割されます – fubo

+1

それはブラケットのためにかなりCSVではありませんが、それは参考になります、ありがとう! – invalidusername

+3

いいえ、自分で何も分割しないでください。この形式には専用のパーサーを使用します。 – CodeCaster

答えて

4

まず、あなたのエンティティを表しますクラスを作成します。

public class Entity 
{ 
    public string Name { get; set; } 
    public int B01001_001E { get; set; } 
    public int State { get; set; } 
    public int County { get; set; } 
    public int Tract { get; set; } 
    public int BlockGroup { get; set; } 
} 

次に、あなたのデータをデシリアライズ:

IEnumerable<string[]> records = JsonConvert.DeserializeObject<IEnumerable<string[]>>(data); 

IEnumerable<Entity> entities = 
records.Skip(1) // We skip the header row 
.Select(r => new Entity() 
{ 
    Name = r[0], 
    B01001_001E = Convert.ToInt32(r[1]), 
    State = Convert.ToInt32(r[2]), 
    County = Convert.ToInt32(r[3]), 
    Tract = Convert.ToInt32(r[4]), 
    BlockGroup = Convert.ToInt32(r[5]) 
}); 
+0

ありがとう、私はそれが有効なJSONデータセットではなかったという仮定の下にあった。そうです。以前のJSONパーサで問題が発生していたので、それが当てはまると思いました。 – invalidusername