NewtonSoft.JSON官方手册中文版【连载17】

LINQ to JSON

LINQ to JSON是用来处理JSON对象的API。它的设计考虑了LINQ,以支持快速查询和创建JSON对象。LINQ to JSON位于Newtonsoft.Json.Linq命名空间下面。

使用LINQ for JSON

JObject o = JObject.Parse(@"{
  'CPU': 'Intel',
  'Drives': [
  'DVD read/writer',
  '500 gigabyte hard drive'
  ]
}");
string cpu = (string)o["CPU"];
// Intel
string firstDrive = (string)o["Drives"][0];
// DVD read/writer
IList<string> allDrives = o["Drives"].Select(t => (string)t).ToList();
// DVD read/writer
// 500 gigabyte hard drive

主题

从下面选择一个主题以进一步了解

  • 解析JSON
  • 创建JSON
  • 利用LINQ解析JSON
  • 利用SelectToken查询JSON

解析JSON

LINQ to JSON具有一些方法,可用来从字符串解析JSON,或直接从文件载入JSON。

  • 解析JSON文本
  • 从文件载入JSON

解析JSON文本

可利用Parse(String)从一个字符串读取JSON值。

从文本解析一个JSON对象

string json = @"{
  CPU: 'Intel',
  Drives: [
  'DVD read/writer',
  '500 gigabyte hard drive'
  ]
}";
JObject o = JObject.Parse(json);

从文本解析一个JSON数组

string json = @"[
  'Small',
  'Medium',
  'Large'
]";
JArray a = JArray.Parse(json);

从文件中载入JSON

还可以利用ReadFrom(JsonReader)直接从文件中载入JSON。

从文件中读取JSON

using (StreamReader reader = File.OpenText(@"c:\person.json"))
{
  JObject o = (JObject)JToken.ReadFrom(new JsonTextReader(reader));
  // do stuff
}

创建JSON

除了解析已有的JSON字符串,还可以从零开始LINQ to JSON对象,创建也一个新的JSON结构。

  • 手工创建JSON
  • 利用LINQ创建JSON
  • 从对象创建JSON

手工创建JSON

逐个设置值,并创建一个对象和数组,给你完全的控制,但是它比其他选项现详细。

创建JSON

JArray array = new JArray();
JValue text = new JValue("Manual text");
JValue date = new JValue(new DateTime(2000, 5, 23));
array.Add(text);
array.Add(date);
string json = array.ToString();
// [
//   "Manual text",
//   "2000-05-23T00:00:00"
// ]

利用LINQ创建JSON

使用LINQ声明式地创建JSON,是一种根据值的集合创建JSON的快速方法。

声明式地创建JSON

List<Post> posts = GetPosts();
JObject rss =
  new JObject(
      new JProperty("channel",
          new JObject(
              new JProperty("title", "James Newton-King"),
              new JProperty("link", "http://james.newtonking.com"),
              new JProperty("description", "James Newton-King's blog."),
              new JProperty("item",
                  new JArray(
                      from p in posts
                      orderby p.Title
                      select new JObject(
                          new JProperty("title", p.Title),
                          new JProperty("description", p.Description),
                          new JProperty("link", p.Link),
                          new JProperty("category",
                              new JArray(
                                  from c in p.Categories
                                  select new JValue(c)))))))));
Console.WriteLine(rss.ToString());
//{
//  "channel": {
//    "title": "James Newton-King",
//    "link": "http://james.newtonking.com",
//    "description": "James Newton-King\'s blog.",
//    "item": [
//      {
//        "title": "Json.NET 1.3 + New license + Now on CodePlex",
//        "description": "Announcing the release of Json.NET 1.3, the MIT license and being available on CodePlex",
//        "link": "http://james.newtonking.com/projects/json-net.aspx",
//        "category": [
//          "Json.NET",
//          "CodePlex"
//        ]
//      },
//      {
//        "title": "LINQ to JSON beta",
//        "description": "Announcing LINQ to JSON",
//        "link": "http://james.newtonking.com/projects/json-net.aspx",
//        "category": [
//          "Json.NET",
//          "LINQ"
//        ]
//      }
//    ]
//  }
//}

从对象创建JSON

从非JSON类型创建JSON对象的最后一个选项是使用FromObject()方法。在内部,FromObject将使用JsonSerializer将对象序列化为LINQ to JSON对象,而不是文本。

下面的示例演示了从匿名对象创建一个JSON对象,但是FromObject中可以使用任何.NET对象,来创建JSON。

从对象创建JSON

JObject o = JObject.FromObject(new
{
  channel = new
  {
      title = "James Newton-King",
      link = "http://james.newtonking.com",
      description = "James Newton-King's blog.",
      item =
          from p in posts
          orderby p.Title
          select new
          {
              title = p.Title,
              description = p.Description,
              link = p.Link,
              category = p.Categories
          }
  }
});

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值