【愚公系列】2023年04月 .NET_C#知识点-Linq To Json

举报
愚公搬代码 发表于 2023/04/30 23:46:42 2023/04/30
【摘要】 前言JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,可用于客户端和服务器之间传输数据。JSON使用易于阅读和编写的文本格式,可以描述其他语言中的对象、数组、数字、字符串、布尔和null值,因此被广泛应用于Web服务和数据交换。强类型和弱类型语言在处理JSON的方式上有所不同。在强类型语言中,必须在代码中显式地定义变量的数据类型,而在解析或生成JSO...

前言

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>());
}



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。