2016-07-11 22 views
0

Json.netでjsonファイルを解析しようとしています。 JSONファイルの内容は次のとおりです。 キー値のないjsonファイルの解析

[ 
    [ "240521000", "37.46272", "25.32613", "0", "71", "90", "15", "2016-07-18T21:09:00" ], 
    [ "237485000", "37.50118", "25.23968", "177", "211", "273", "8", "2015-09-18T21:08:00" ] 
] 

は、私は次のコードを作成しました:

WebClient wc = new WebClient(); 
    string json = wc.DownloadString("data.json"); 
    dynamic myObject = JsonConvert.DeserializeObject<dynamic>(json); 

    foreach (string item in myObject[0]) 
    { 
     var x = item[0]; 

    } 

をどのようにすることができますIキーを持たずに、すべての個々の項目をループ?

+0

投稿したJSONは正しいですか? 2次元配列([] [])を示していますが、ネストされた配列の内容はオブジェクトでなければならないように見えます(通常は{}で示されます)。 – mtaanquist

+0

@MadsTaanquist jsonはhttp://www.marinetraffic.com/nl/ais-api-services/documentation/api-service:27 –

答えて

1

diiN_の答えが質問に答えても、私はそれは良い解決策ではないと思います。 Marine Traffic APIを見てみると、XML表現には値の属性名が明示されているため、JSONの実装が貧弱であるように感じられます。彼らのJSONをしてきたはずです。

{"positions": ["position": {"mmsi": "311029000", "lat": "37.48617", "long": "24.37233", ...}]} 

ことはないので、我々はそれが配列の2次元配列であるネストされた配列、だ、とあなたが希望を持っていると思います代わりにJSON文字列を持っていますインデックスを使用してデータを取得する必要があるため、データモデルは何かを削除するために変更されません。

ただし、APIから利用可能なXMLを見ると、属性には名前があります。代わりにXMLをダウンロードし、これをオブジェクト(ASP.NETのモデル)に解析することをお勧めします。このモデルは厳密に型指定されており、Viewでより簡単に使用できます。

ここに私が走っている例があります。 XML解析を使用して、まずAPIからXMLを読み込み、それをJSON、そして最後に実際のオブジェクトに解析します。

まず、モデルクラス(Position.cs)

public sealed class Position 
{ 
    [JsonProperty("@MMSI")] 
    public string MMSI { get; set; } 
    [JsonProperty("@LAT")] 
    public string Latitude { get; set; } 
    [JsonProperty("@LON")] 
    public string Longitude { get; set; } 
    [JsonProperty("@SPEED")] 
    public string Speed { get; set; } 
    [JsonProperty("@HEADING")] 
    public string Heading { get; set; } 
    [JsonProperty("@COURSE")] 
    public string Course { get; set; } 
    [JsonProperty("@STATUS")] 
    public string Status { get; set; } 
    [JsonProperty("@TIMESTAMP")] 
    public string TimeStamp { get; set; } 
} 

次に、解析ロジック:

var client = new WebClient(); 
var xml = client.DownloadString("data.xml"); 
var doc = new XmlDocument(); 
doc.LoadXml(xml); 

var json = JsonConvert.SerializeXmlNode(doc); 
var positions = JObject.Parse(json).SelectToken("pos").SelectToken("row").ToObject<List<Position>>(); 

解析ロジックの終わりに、あなたは今のリストを持っていますビューに渡すことができ、強く型付けされた位置。簡単な例として

// after you have the positions list 
return View(positions); 

Positions.cshtml

@model List<Positions> 

<h2>Positions</h2> 
@foreach (var position in Model) 
{ 
    <p>@position.MMSI (@position.Latitude, @position.Longitude)</p> 
} 

私はこれがあなたにとって有用であると思います。ご質問がありましたら、私にコメントをお送りください。

+0

から来ています。この素晴らしい説明をありがとう! –

3

おそらく2つのネストされたforeachステートメントが必要です。

foreach (var items in myObject) 
{ 
    foreach (var item in items) 
    { 
     // do something 
    } 
}