zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    win8系统服务管理添加mysql的方法
    一步一步学SpringDataJpa——JpaRepository查询功能
    mysql本地实时同步和异地同步
    利用xml导出word文件---换行
    关于jdbc,mysql与postgres区别
    mysql通过bin-log恢复数据库
    jQuery之Deferred对象详解
    【转】$.ajax()引发的对Deferred的总结
    Tomcat 中响应头信息(Http Response Header) Content-Length 和 Transfer-Encoding 之种种
    xml解析
  • 原文地址:https://www.cnblogs.com/shy1766IT/p/5304741.html
Copyright © 2011-2022 走看看