【愚公系列】2023年04月 .NET_C#知识点-Linq To Json
前言
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,可用于客户端和服务器之间传输数据。JSON使用易于阅读和编写的文本格式,可以描述其他语言中的对象、数组、数字、字符串、布尔和null值,因此被广泛应用于Web服务和数据交换。
强类型和弱类型语言在处理JSON的方式上有所不同。在强类型语言中,必须在代码中显式地定义变量的数据类型,而在解析或生成JSON时,需要使用类似于类型转换这样的技术来将JSON数据转换为强类型数据。而在弱类型语言中,则可以直接将JSON数据解析为动态类型,并使用该数据。这样的话,弱类型语言可能更容易忽略JSON数据的错误,但也更加灵活。
Linq To Json就是解决强类型语言处理Json数据的神器。
一、Linq To Json
1.Linq To Json的定义
Linq To Json是一种在.NET平台上用于处理JSON数据的工具,它可以将JSON数据查询和操作转换为面向对象的LINQ查询语言,便于开发人员在.NET应用程序中对JSON数据进行处理。
2.生成Json
1、JObject的JProperty生成json
using Newtonsoft.Json.Linq;
JObject json = new JObject(
new JProperty("Code", 101),
new JProperty("Items", new JArray(new JObject()
{
new JProperty("OrderTitle","订单1"),
new JProperty("Created",DateTime.Now)
}))
);
Console.WriteLine(json.ToString());
2、JObject的匿名类生成json
using Newtonsoft.Json.Linq;
JObject json = JObject.FromObject(new
{
Code = 101,
Items = (new[]
{
new { OrderTitle="订单1",Created=DateTime.Now }
}).ToList()
});
Console.WriteLine(json.ToString());
3.解析Json
3.1 Linq解析
{
"store":{
"book":[
{
"category":"reference",
"author":"Nigel Rees",
"title":"Sayings of the Century",
"price":8.95
},
{
"category":"fiction",
"author":"Evelyn Waugh",
"title":"Sword of Honour",
"price":12.99
},
{
"category":"fiction",
"author":"Herman Melville",
"title":"Moby Dick",
"isbn":"0-553-21311-3",
"price":8.99
},
{
"category":"fiction",
"author":"J. R. R. Tolkien",
"title":"The Lord of the Rings",
"isbn":"0-395-19395-8",
"price":22.99
}
],
"bicycle":{
"color":"red",
"price":19.95
}
}
}
using Newtonsoft.Json.Linq;
var json = System.IO.File.ReadAllText("1.txt");
JObject obj = JObject.Parse(json);
var dict = obj["store"]["book"].GroupBy(m => m["category"])
.ToDictionary(k => k.Key,
v => v.Select(n => n.Value<decimal>("price")).Sum());
foreach (var key in dict.Keys)
{
Console.WriteLine($"key={key},value={dict[key]}");
}
3.2 Jsonpath解析
jsonpath 就像 xmlpath 一样,非常强大,更多的功能可以参考这个网页:https://goessner.net/articles/JsonPath/
var json = System.IO.File.ReadAllText("1.txt");
JObject obj = JObject.Parse(json);
var priceList= obj.SelectTokens("$..price");
foreach (var price in priceList)
{
Console.WriteLine(price.Value<decimal>());
}
- 点赞
- 收藏
- 关注作者
评论(0)