c# - foreach 循环获取 JSON 值

标签 c# json parsing

我正在尝试获取 JSON 结果的所有纬度和经度。

JSON 结果(有很多记录):

"results" : [
  {
     "geometry" : {
        "location" : {
           "lat" : 28.637255,
           "lng" : 77.05202800000001
        }
     },
     "icon" : "http://maps.gstatic.com/mapfiles/place_api/icons/generic_business-71.png",
     "id" : "aef56d078ec3fcab6f4a966bd944d3d59973bd72",
     "name" : "Homeopati Kendra",
     "opening_hours" : {
        "open_now" : false,
        "weekday_text" : []
     },
     "place_id" : "ChIJQavdFRwFDTkRMRAhjCbIOnI",
     "reference" : "CnRjAAAAwCoBEGDvsL4KeQNPyT2OsVF82b7FChIpUHRFQvGg8b1eR7FCv9I1nUPn0lFf50OVG9ug1PevkcZG813Lq9AAe1dK5GCgn99ajpQ1it9lafCwX3SaUwtiinLiepgptdHNz3NgDzhpVIx70a2D1KZcchIQvD4OS73_Jmr2wYQg4jtRjxoUjCnGT2M4XzDIXadJOtgA-LgRNR4",
     "scope" : "GOOGLE",
     "types" : [ "hospital", "health", "establishment" ],
     "vicinity" : "C-29 , Vikas Nagar,Uttam Nagar, Vikas Nagar Extn, Hastsal, New Delhi"
  },

对于特定记录(先说记录):

JObject obj = JObject.Parse(googleResult);
JArray jarr = (JArray)obj["results"];
double lt = (double)jarr[0]["geometry"]["location"]["lat"];
double lg = (double)jarr[0]["geometry"]["location"]["lng"];

用于获取所有记录:

foreach(var item in jarr)
{
double lt = Convert.ToDouble(item[jarr["geometry"]["location"]["lat"]]);
}

对于获取一条记录,它工作正常,但对于所有记录,它不起作用。

最佳答案

您可以使用SelectTokens从 JSON 中挑选出感兴趣的字段。由于该方法支持 JSONPath query syntax您可以使用 "*" 通配符循环遍历 "results" 数组中的所有条目:

        var locations = JToken.Parse(googleResult)
            .SelectTokens("results[*].geometry.location")
            .Select(t => new { Lat = (double)t["lat"], Lng = (double)t["lng"] })
            .ToList();

或者,如果您更喜欢 foreach 循环:

        JObject obj = JObject.Parse(googleResult);
        JArray jarr = (JArray)obj["results"];
        foreach (var item in jarr)
        {
            double lt = (double)item.SelectToken("geometry.location.lat");
            double lg = (double)item.SelectToken("geometry.location.lng");
        }

关于c# - foreach 循环获取 JSON 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31172157/

相关文章:

C#合并文件可直接访问

JSON API Wordpress 通过应用上传时不显示特色图片

java - 如何在JAVA中使用htmlparsing和curl来完成这个任务...?

c# - 从另一个进程获取win32线程的StartAddress

c# - 405 方法不允许 - ASP.NET Web API

javascript - JSON解析重复数据的问题?

c - 在 C 中推荐的 JSON 解析器?

json - 在Scala中解析JSON的最直接方法是什么?

c# - IIS调试在Windows 2012服务器IIS 8.0

javascript - sailsjs 不选择本地更新的 json