从Json字符串中解析JArray?

时间:2016-07-05 10:31:34

标签: c# json json.net

我想从Json String解析JArray。为此,我有这个代码:

        JObject myjson = JObject.Parse(theJson);
        JArray nameArray = JArray.Parse(theJson);                 
        _len = nameArray.Count();

theJsonString是以下

"{\"0\": [-26.224264705882351, 0.67876838235294112, -38.031709558823529, 46.201555361781679],
  \"1\": [-26.628676470588236, 2.4784007352941178, -37.377297794117645, 45.959670050709867]}"

问题是,当我调试时,我的nameArray总是为null而_len = 0。 你能帮忙找到错误。

3 个答案:

答案 0 :(得分:2)

FYI Count不是一种方法,它是一种财产。 下面添加了一个示例,所以请使用这样的

string json = @"
    [ 
        { ""test1"" : ""desc1"" },
        { ""test2"" : ""desc2"" },
        { ""test3"" : ""desc3"" }
    ]";

    JArray a = JArray.Parse(json);
     var _len = a.Count;

您将获得_len = 3

的值

答案 1 :(得分:0)

这里你不能将你的json解析为JArray。但是如果你想保留你的json字符串,你可以像数组一样使用JsonObject。

这是一些不好的代码,但它可以给你一些想法,我假设你的json字符串中的数字是一些ID并从0开始到X:

        //Your json, the id is the value 0..1..2
        string json = "{\"0\": [-26.224264705882351, 0.67876838235294112, -38.031709558823529, 46.201555361781679],
                         \"1\": [-26.628676470588236, 2.4784007352941178, -37.377297794117645, 45.959670050709867]}";

        //Create json object
        JObject myjson = JObject.Parse(json);

        //Get the number of different object that you want to get from this json
        int count = getCountMyJson(myjson);

        //Create your Jarray
        JArray nameArray = new JArray();

        //Get the value from the json, each different value , start to 0 and going to the maximum value
        for (int i = 0; i < count; i++)
        {
           if(myjson[i+""] != null)
            nameArray.Add(myjson[i + ""]);
        }
        //Now you have a JArray that match all your json value ( here the object 0 and 1)

这是一个糟糕的功能(糟糕的代码,虽然令人恶心),但它有效,你可以理解你可以用它做什么(假设id为0到XXX):

 public static int getCountMyJson(JObject json)
    {
        int i = 0;
      while(json.GetValue(i+"") != null)
        { i++; }
        return i;
    }

答案 2 :(得分:0)

您的Json无效

有效的Json

{"0": [-26.224264705882351, 0.67876838235294112, -38.031709558823529, 46.201555361781679],
  "1": [-26.628676470588236, 2.4784007352941178, -37.377297794117645, 45.959670050709867]}

使用此代码反序列化json

    var myjson = JsonConvert.DeserializeObject <Dictionary<int, double[]>>(theJson);
int _len = myjson.Count;