我正在尝试使用Json.net
解析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];
}
如何在没有钥匙的情况下循环浏览所有单个项目?
答案 0 :(得分:3)
您可能只需要两个嵌套的foreach
语句。尝试这样的事情:
foreach (var items in myObject)
{
foreach (var item in items)
{
// do something
}
}
答案 1 :(得分:1)
虽然diiN的回答回答了这个问题,但我认为这不是一个好的解决方案。看过Marine Traffic API之后,感觉他们做了一个糟糕的JSON实现,因为XML表示清楚地具有值的属性名称。他们的JSON应该是:
{"positions": ["position": {"mmsi": "311029000", "lat": "37.48617", "long": "24.37233", ...}]}
因为它不是,我们有一个JSON字符串,而不是它是一个嵌套数组,其中数组是一个二维数组,你不得不希望数据模型不是&# 39; t已更改为删除某些内容,因为您必须使用索引来检索数据。
但是,如果查看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>
}
我希望这对你有用。如果您有任何问题,请给我发表评论。