Newtonsoft.Json之JArray, JObject, JProperty,JValue

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<string>("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<int>("yy");
            }
            string yy1 = json["arr"][0].Value<string>("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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值