博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Newtonsoft.Json之JArray, JObject, JProperty,JValue
阅读量:4589 次
发布时间:2019-06-09

本文共 4555 字,大约阅读时间需要 15 分钟。

 https://www.cnblogs.com/shy1766IT/p/5304741.html
http://www.cnblogs.com/usharei/archive/2012/04/24/2467578.html
 
 

JObject staff = new JObject();

            staff.Add(new JProperty("Name", "Jack"));

            staff.Add(new JProperty("Age", 33));

            staff.Add(new JProperty("Department", "Personnel Department"));

            staff.Add(new JProperty("Leader", new JObject(new JProperty("Name", "Tom"), new JProperty("Age", 44), new JProperty("Department", "Personnel Department"))));

            Console.WriteLine(staff.ToString());

 

  

            JArray arr = new JArray();

            arr.Add(new JValue(1));

            arr.Add(new JValue(2));

            arr.Add(new JValue(3));

            Console.WriteLine(arr.ToString());

 

 

 

string json = "{\"Name\" : \"Jack\", \"Age\" : 34, \"Colleagues\" : [{\"Name\" : \"Tom\" , \"Age\":44},{\"Name\" : \"Abel\",\"Age\":29}] }";

获取该员工的姓名

            //将json转换为JObject

            JObject jObj = JObject.Parse(json);

            //通过属性名或者索引来访问,仅仅是自己的属性名,而不是所有的

            JToken ageToken =  jObj["Age"];

            Console.WriteLine(ageToken.ToString());

 

 

 

获取该员工同事的所有姓名

 

            //将json转换为JObject

            JObject jObj = JObject.Parse(json);

            var names=from staff in jObj["Colleagues"].Children()

                             select (string)staff["Name"];

            foreach (var name in names)

                Console.WriteLine(name);

 

"Children()"可以返回所有数组中的对象

 

 

 

现在我们发现获取的json字符串中Jack的年龄应该为35

            //将json转换为JObject
            JObject jObj = JObject.Parse(json);
            jObj["Age"] = 35;
            Console.WriteLine(jObj.ToString());

 

 

 

现在我们发现Jack的同事Tom的年龄错了,应该为45

 

            //将json转换为JObject

            JObject jObj = JObject.Parse(json);

            JToken colleagues = jObj["Colleagues"];

            colleagues[0]["Age"] = 45;

            jObj["Colleagues"] = colleagues;//修改后,再赋给对象

            Console.WriteLine(jObj.ToString());

 

 

 

删除

①现在我们想删除Jack的同事

            JObject jObj = JObject.Parse(json);
            jObj.Remove("Colleagues");//跟的是属性名称
            Console.WriteLine(jObj.ToString());

 

 

 

现在我们发现Abel不是Jack的同事,要求从中删除

            JObject jObj = JObject.Parse(json);
            jObj["Colleagues"][1].Remove();
            Console.WriteLine(jObj.ToString());

 

 

 

我们发现Jack的信息中少了部门信息,要求我们必须添加在Age的后面

            //将json转换为JObject
            JObject jObj = JObject.Parse(json);
            jObj["Age"].Parent.AddAfterSelf(new JProperty("Department", "Personnel Department"));
            Console.WriteLine(jObj.ToString());

 

 

 

现在我们又发现,Jack公司来了一个新同事Linda

            //将json转换为JObject
            JObject jObj = JObject.Parse(json);
            JObject linda = new JObject(new JProperty("Name", "Linda"), new JProperty("Age", "23"));
            jObj["Colleagues"].Last.AddAfterSelf(linda);
            Console.WriteLine(jObj.ToString());

 

 

 

使用函数SelectToken可以简化查询语句,具体:

①利用SelectToken来查询名称

            JObject jObj = JObject.Parse(json);
            JToken name = jObj.SelectToken("Name");
            Console.WriteLine(name.ToString());

 

 

②利用SelectToken来查询所有同事的名字

            JObject jObj = JObject.Parse(json);
            var names = jObj.SelectToken("Colleagues").Select(p => p["Name"]).ToList();
            foreach (var name in names)
                Console.WriteLine(name.ToString());

 

 

 

查询最后一名同事的年龄

            //将json转换为JObject
            JObject jObj = JObject.Parse(json);
            var age = jObj.SelectToken("Colleagues[1].Age");
            Console.WriteLine(age.ToString());

 

 

 

 

 定义一个错误提示:

JObject errors = new JObject();

if (productName.Length <= 0)

        {

            errors.Add("ProductName", new JValue("该输入项为必输项"));

        }

 

复制代码
//获取json里的值string jsonStr = "";//Json Str字符串            JToken json = JToken.Parse(jsonStr);//转化为JToken(JObject基类)            string xx = json.Value
("xx");//获取Json里xx键的值 JToken arr = json["arr"];//获取Json里的数组 {arr:[{yy:1,zz:2},{yy:3,zz:4}]} foreach (JToken baseJ in arr)//遍历数组 { int yy = baseJ.Value
("yy"); } string yy1 = json["arr"][0].Value
("yy");//也可以酱紫,多层的获取 string yy2 = json["arr"][0]["yy"] != null ? json["arr"][0]["yy"].ToString() : "";//这个和上面句等价,不要直接ToString,容易报错
复制代码

 

JToken.ToObject Method

Overload List                        Name Description

Public method ToObject<T>()            Creates an instance of the specified .NET type from the JToken.
Public method ToObject(Type)           Creates an instance of the specified .NET type from the JToken.
Public method ToObject<T>(JsonSerializer)   Creates an instance of the specified .NET type from the JToken using the specified JsonSerializer.
Public method ToObject(Type, JsonSerializer)  Creates an instance of the specified .NET type from the JToken using the specified JsonSerializer.

 

http://www.cnblogs.com/usharei/archive/2012/04/24/2467578.html

转载于:https://www.cnblogs.com/bwdblogs/p/11087653.html

你可能感兴趣的文章
C# 中的异常处理
查看>>
c# 调试
查看>>
c# 使用序列化
查看>>
c# VS.NET 中的调试工具
查看>>
c# System.Array
查看>>
c# StringBuilder类
查看>>
c# 格式化数据String.Format
查看>>
c# 日期和时间System.DateTime
查看>>
c# 字符串修改
查看>>
c# 正则表达式
查看>>
c# Regex类
查看>>
c# Match类
查看>>
c# MatchCollection类
查看>>
c# Group类
查看>>
c# FileStream 类构造函数
查看>>
H3C 帧聚合
查看>>
H3C WLAN相关组织和标准
查看>>
H3C 802.11网络的基本元素
查看>>
redis Set相关命令
查看>>
基于物品的协同过滤(ItemCF)
查看>>