如何将JArray解析为JObjects,获取JObjects字符串的前4个字母并将它们保存回JArray

时间:2016-07-01 12:33:04

标签: c# json linq asp.net-mvc-4 json.net

我正在使用与邮政编码相关的API服务,您可以在给定邮政编码的给定距离内获取所有其他邮政编码。

以下是Json结果

的示例
{
    "postcode":"******",
    "lat":111111111,
    "lng":11111111,
    "distance":0.0        
},
{
    "postcode":"******",
    "lat":2222222222,
    "lng":2222222222222,
    "distance":0.0343
}

我在API Controller

中使用以下内容
public object GetPostcodesWithin(string postcode, double distance)
    {
        var trimPostcode = postcode.Trim();
        var url = "some url" + trimPostcode + "&miles=" + distance + "&format=json";
        dwml = webClient.DownloadString(url);
        dynamic jsonData = JArray.Parse(dwml);
        var response = jsonData;

        dynamic secondps = jsonData[1];
        string newps = secondps.postcode;

        JObject rss = JObject.Parse(jsonData);
        var postcodes = from p in rss["{ }"]
                        select (string)p["postcode"];

        JArray finalPostcodes = new JArray();
        // List<string> finalPostcodes = new List<string>();

        foreach (var item in postcodes)
        {
            var firstletters = item.Substring(0, 4);
            finalPostcodes.Add(firstletters);
        }
        return finalPostcodes;

        //int length = response.Count;
        //for (int i = 0; i < response.Count; i++)
        //{
        //    var item = (JObject)response[i];

        //    // JObject o = JObject.Parse(response);
        //}

        //for (int i=0; i< dwml.Length; i++)
        //{
        //    JToken t[i] = JToken.Parse("{}");

        //}

        //JObject rss = JObject.Parse(json);

        //var postTitles =
        //from p in rss["channel"]["item"]
        //select(string)p["title"];

        //foreach(var item in postTitles)
        //    {
        //        Console.WriteLine(item);
        //    }

        // return Json(newps);
    }

所有注释掉的部分都是我尝试的不同之处。基本上我得到动态Json数据,但在此行JObject rss = JObject.Parse(jsonData);它失败了。目标是只获取JArray中每个对象的postcode属性的前4个字母,将其保存在另一个JArrayList中,以便我可以使用它来查询来自其中的匹配数据MVC Web应用程序的数据库。

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

string yourJsonData = // your json array
var jsonArray = JArray.Parse(yourJsonData);

var resultList = new List<string>();
foreach(var jsonObj in jsonArray)
{
    dynamic obj = jsonObj;
    string postcode = obj.postcode;

    resultList.Add(postcode.Substring(0,4));
}

它将遍历所有返回的项目,获取每个邮政编码中的前4个字符并将其存储在resultList中。