zoukankan      html  css  js  c++  java
  • C#解析Json

    第一、解析JSON数据

    工具:Newtonsoft.Json 类库/dll

    目前我用到解析json数据的就只用到这个类库,用这个类库可以很方便的对于C#和JSON直接进行序列化和反序列化解析

    首先我在本地文本文件txt复制了网上一段写好的json数据如下图(该txt文件路径是保存在d盘中):

    好了,接下来我们就来解析这个txt文本格式的json数据吧!为了好演示我就直接新建一个控制台代码如下

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Newtonsoft.Json;
    using System.IO;
    using Newtonsoft.Json.Linq;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                JsonSerializer serializer = new JsonSerializer();
                using (StreamReader reader=new StreamReader(@"d:json.txt"))
                using (JsonReader jsreader=new JsonTextReader(reader)) 
                {
                    JObject jo = (JObject)serializer.Deserialize(jsreader);//对于json的反序列化再转化为JObject
                    Console.WriteLine(jo.ToString());
                }
                Console.Read();
                
            }
        }
    }

    运行结果:

    二、Linq To Json

    linq to json的主要类:

    1.JObejct :用于操作json的对象

    2.JArray: 用来操作json数组

    3.JValue :数组中的值

    4.JProperty: json对象的属性,通常以key和value类似于字典形式存在

    5.JToken :用于存放linq查询的结果值

    下面稍微演示下用法,用JObejct创建json数据并且输出代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Newtonsoft.Json;
    using System.IO;
    using Newtonsoft.Json.Linq;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                JObject jo = new JObject();
                jo.Add(new JProperty("name", "张惠妹"));
                jo.Add(new JProperty("sex", ""));
                jo.Add(new JProperty("age", "32"));
                jo.Add(new JProperty("teachar", new JObject(new JProperty("name", "张雨生"), new JProperty("sex", ""), new JProperty("age", "30"))));
                Console.WriteLine(jo.ToString());
                Console.ReadLine();
                
            }
        }
    }

    在这个基础上代码再改下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Newtonsoft.Json;
    using System.IO;
    using Newtonsoft.Json.Linq;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
                JObject jo = new JObject();
                jo.Add(new JProperty("name", "张惠妹"));
                jo.Add(new JProperty("sex", ""));
                jo.Add(new JProperty("age", "32"));
                jo.Add(new JProperty("teachar", new JObject(new JProperty("name", "张雨生"), new JProperty("sex", ""), new JProperty("age", "30"))));
                JToken Tteacher = jo["teachar"];
                Console.WriteLine(Tteacher.ToString());
                Console.ReadLine();
                
            }
        }
    }

    由此可以知道JToken返回的其实是对应key的value部分,再来用linq to json,首先准备一字符串,用linq 查询王力宏的朋友的名字:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Newtonsoft.Json;
    using System.IO;
    using Newtonsoft.Json.Linq;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
    
               string jsonstr= "{"Name" : "王力宏", "Age" : 34, "friends" : [{"Name" : "林俊杰" , "Age":30},{"Name" : "张惠妹","Age":29}] }";
                JObject jo = JObject.Parse(jsonstr);
                var a = from b in jo["friends"].Children()
                        select (string) b["Name"];
                foreach (var item in a)
                {
                    Console.WriteLine(item);
                }
                Console.Read();
            }
        }
    }

    简单地对于Json的解析就介绍到这里了。。。有什么不对的地方或者需要改正的地方请大牛们指正

  • 相关阅读:
    hdu2302(枚举,大数取模)
    hdu2108(判断凸多边形)
    Codeforces Round #324 (Div. 2) C (二分)
    hdu1798(圆的位置关系)
    hdu1722(gcd)
    alias命令(使用命令别名)
    关于Linux环境变量
    poj1988(并查集)
    Linux基本命令
    Pandas数据规整
  • 原文地址:https://www.cnblogs.com/ryzen/p/8529915.html
Copyright © 2011-2022 走看看