欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Json的动态解析

程序员文章站 2022-07-01 17:02:14
最近在项目中需要动态解析json,但解析json的方式有很多,如何合理的解析就是我们需要考虑的问题?比如Newtonsoft.Json.Linq下提供的JToken、JObject等,Newtonsoft.Json下提供的JsonConvert。 我们今天主要介绍不同解析方式适用的场景以及用法: 1 ......

 最近在项目中需要动态解析json,但解析json的方式有很多,如何合理的解析就是我们需要考虑的问题?比如newtonsoft.json.linq下提供的jtoken、jobject等,newtonsoft.json下提供的jsonconvert。

jobject  用于操作json对象
jarray 用于操作json数组
jvalue 表示数组的值
jproperty  表示对象中的属性,以"key/value"的形式
jtoken 用于存放linq to json查询后的结果

 

 

 

 

 

 

我们今天主要介绍不同解析方式适用的场景以及用法:

1、jobject

Json的动态解析

  jobject用于操作对象,若用它来解析其它类型的json会报newtonsoft.json.jsonreaderexception。 

jobject jobject = new jobject();
jobject.add(new jproperty("name", "caixukun"));
jobject.add(new jproperty("skill", new jobject(new jproperty("id", 1), new jproperty("name", "撩妹"))));
console.writeline(jobject.tostring());
结果:
{
"name": "caixukun",
  "skill": {
    "id": 1,
    "name": "撩妹"
  }

 2、jarray

Json的动态解析

  jarray用于操作数组,若用它来解析其它类型的json会报newtonsoft.json.jsonreaderexception。 

jarray arr = new jarray();
arr.add(new jvalue(1));
arr.add(new jvalue(2));
arr.add(new jvalue(3));
console.writeline(arr.tostring());
结果:
[
 1,
 2,
 3
]

3、jtoken 

string json = "{\"name\" : \"jack\", \"age\" : 34, \"colleagues\" : [{\"name\" : \"tom\" , \"age\":44},{\"name\" : \"abel\",\"age\":29}] }";
// 获取员工名称
jobject jobject = jobject.parse(json);
var name = jobject.value<string>("name");
console.writeline(name);
// 获取员工年龄
jtoken jtoken = jobject.selecttoken("age");
console.writeline(jtoken.tostring());
// 获取同事信息
jtoken jtoken1 = jobject["colleagues"];
console.writeline(jtoken1.tostring());
console.writeline("=============================");
// 获取员工同事的所有姓名
var names = from staff in jtoken1.children()
            select (string)staff["name"];
// var names = jobject.selecttoken("colleagues").select(p => p["name"]).tolist();
foreach (var item in names)
{
    console.writeline(item);
}
console.writeline("=============================");
// 修改jack的年龄
jobject["age"] = 99;
console.writeline(jobject.tostring());
// 修改同事tome的年龄
jtoken1[0]["age"] = 45;
console.writeline(jobject.tostring());
console.writeline("=============================");
// abel离职了
jobject["colleagues"][1].remove();
console.writeline(jobject.tostring());
// 移除jack的同事
jobject.remove("colleagues");
console.writeline(jobject.tostring());
console.writeline("=============================");
// jack缺少部门信息
jobject["age"].parent.addafterself(new jproperty("department", "总裁办"));
// 来了一个新员工jerry
jobject linda = new jobject(new jproperty("name", "linda"), new jproperty("age", "23"));
jobject.add(new jproperty("colleagues", new jarray() { linda }));
console.writeline(jobject.tostring());

参考: