Newtonsoft JSON SelectToken从JSON文档的多个部分获取数据?

时间:2015-12-03 18:03:05

标签: json json.net

我的JSON看起来像这样:(我不控制这个数据结构)

{  
   "Quest":"To seek the Holy Grail",
   "FavoriteColor":"Blue",
   "Mother":{  
      "name":"Eve",
      "dob":"1/1/1950"
   },
   "Father":{  
      "name":"Adam",
      "dob":"2/1/1950"
   },
   "Siblings":[  
      {  
         "name":"Abel",
         "dob":"1/1/1980"
      },
      {  
         "name":"Kain",
         "dob":"3/1/1981"
      }
   ]
}

我编写的代码使用Newtonsoft JSON SelectToken方法查找母亲,父亲和兄弟姐妹的名字并在屏幕上打印出来:

using System;
using Newtonsoft.Json.Linq;

namespace JsonTest
{
    class Program
    {
        const string JSON = @"{  
           ""Quest"":""To seek the Holy Grail"",
           ""FavoriteColor"":""Blue"",
           ""Mother"":{  
              ""name"":""Eve"",
              ""dob"":""1/1/1950""
           },
           ""Father"":{  
              ""name"":""Adam"",
              ""dob"":""2/1/1950""
           },
           ""Siblings"":[  
              {  
                 ""name"":""Abel"",
                 ""dob"":""1/1/1980""
              },
              {  
                 ""name"":""Kain"",
                 ""dob"":""3/1/1981""
              }
           ]
        }";
        static void Main(string[] args)
        {
            JObject jObject = JObject.Parse(JSON);           

            JToken mother = jObject.SelectToken("Mother");
            JToken father = jObject.SelectToken("Father");
            JToken siblings = jObject.SelectToken("Siblings");

            Console.WriteLine("Mother: " + mother.ToString());
            Console.WriteLine("Father: " + father.ToString());
            Console.WriteLine("Siblings: " + siblings.ToString());
        }
    }
}

我将三个不同的参数传递给SelectToken,将文档的三个不同部分选择为三个不同的JToken变量。应该注意的是,其中两个变量包含单个名称,但最后一个包含一个名称数组。

我被要求做一个任务,我需要将Mother,Father和Siblings的值全部放在一个数组中。

简而言之,我想写这样的东西:

JToken family = jObject.SelectToken("_____");
Console.WriteLine(family.ToString());

结果应为:

[  
   {  
      "name":"Eve",
      "dob":"1/1/1950"
   },
   {  
      "name":"Adam",
      "dob":"2/1/1950"
   },
   {  
      "name":"Abel",
      "dob":"1/1/1980"
   },
   {  
      "name":"Kain",
      "dob":"3/1/1981"
   }
]

我可以在SelectToken的空白处填写一个值来实现这一目标吗?我已经有一个系统,只需一次调用SelectToken即可选择数据,因此如果我不必编写异常来进行多次调用,这将使事情变得更容易。

0 个答案:

没有答案