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
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
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());
参考:
上一篇: IDEA-Maven项目的jdk版本设置
下一篇: 肠胃炎食谱,让你好好调理胃肠道