C#实现解析JSON的示例详解

 更新时间:2024年03月06日 15:40:16   作者:毛维  
这篇文章主要为大家详细介绍了使用C#实现解析JSON的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以跟随小编一起学习一下

1. JSON定义

全称“JavaScript Object Notation(JavaScript对象表示法)”,JSON 是存储和交换文本信息的语法。

举例:

[
    {
        "id": 2,
        "name": "星河爆破",
        "number": 999
    },
    {
        "id": 3,
        "name": "九星连珠",
        "number": 9
    },
    {
        "id": 4,
        "name": "一语成谶",
        "number": 999
    }
]

2. JSON一般构成及解析方法

JSON序列化与反序列化

JSON序列化:将对象转换成JSON 字符串

JSON反序列化:将JSON 字符串转换成对象

JSON结构(2种)

(1)对象结构:{}

{key1:value1,key2:value2...}
key的数据类型:字符串value的数据类型:字符串、数值、null、json数组[]、json对象{}

(2)数组结构:[]

JSON数组结构:[value1,value2......]
value的数据类型:字符串、数值、null、json数组[]、json对象{}

C#代码解析JSON

使用Visual Studio调试代码,使用C#中的Newtonsoft库来解析JSON,添加引用

using Newtonsoft.Json
using Newtonsoft.Json.Linq

解析规则(重要)

针对对象结构{},使用JObject解析

针对数组结构[],使用JArray解析

3. 解析举例子

1. JSON对象解析,只包含一层对象{}

JSON文本:

{
    "name":"张三",
    "name_en":"zhangssan"
}

解析代码如下:

string jsonText = "{\"name\":\"张三\",\"name_en\":\"zhangssan\"}";
//解析对象JObject 
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
//获取此对象key="name"和key="name_en"的值
string zone = jo["name"].ToString();
string zone_en = jo["name_en"].ToString();
Console.WriteLine(zone);
Console.WriteLine(zone_en);

2. 嵌套JSON对象解析,包含多层对象{}

JSON文本:

{
    "allname":{
        "name":"张三",
        "name_en":"zhangsan"
    }
}

解析代码如下:

string jsonText = "{\"allname\":{\"name\":\"张三\",\"name_en\":\"zhangsan\"}}";
//解析对象JObject
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
//获取此对象中key="allname"下key="name"的值
string zone = jo["allname"]["name"].ToString();
string zone_en = jo["allname"]["name_en"].ToString();
Console.WriteLine(zone);
Console.WriteLine(zone_en);

3. JSON数组解析1(数组循环遍历)

JSON文本:

[
    {
        "a":"a1",
        "b":"b1"
    },
    {
        "a":"a2",
        "b":"b2"
    }
]

解析代码如下:

string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]"; 
//解析数组JArray
JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);
//循环获取数组中的内容
for(int i = 0; i < jArray.Count; i++)
{
    //解析对象JObject
     JObject j = JObject.Parse(jArray[i].ToString());
    //获取此对象key="a"的值
    string a = j["a"].ToString();
    Console.WriteLine(a);
}

4. JSON数组解析2(使用index获取数据,index从0开始计算)

JSON文本:

[
    {
        "a":"a1",
        "b":"b1"
    },
    {
        "a":"a2",
        "b":"b2"
    }
]

解析代码如下:

string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]";   
//解析数组JArray           
JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);
//获取数组jArray中第1个(从第0开始计算)key="a"的值
string str = jArray[1]["a"].ToString();
Console.WriteLine(str);

5. JSON 对象中的数组,一层对象{}中包含数组[]

JSON文本:

{
    "name":"网站",
    "num":3,
    "sites":[
        "Google",
        "Runoob",
        "Taobao"
    ]
}

解析代码如下:

string jsonText = "{\"name\":\"网站\",  \"num\":3,  \"sites\":[\"Google\",\"Runoob\",\"Taobao\"]}";
//解析对象JObject
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string sites = jo["sites"].ToString();
//解析数组JArray
JArray jArray = (JArray)JsonConvert.DeserializeObject(sites);
//获取数组sites jArray中第0个(从第0开始计算)的值
string sitesdetails = jArray[0].ToString();
Console.WriteLine(sitesdetails);

6. 嵌套 JSON 对象中的数组,多层对象{}包含数组[]

JSON文本:

{
    "name":"网站",
    "num":2,
    "sites": [
        { "name":"Google", "info":[ "Android", "Google 搜索", "Google 翻译" ] },
        { "name":"Taobao", "info":[ "淘宝", "网购" ] }
    ]
}

解析代码如下:

string jsonText = "{\"name\":\"网站\",\"num\":2,\"sites\":[{\"name\":\"Google\",\"info\":[\"Android\",\"Google搜索\",\"Google翻译\"]},{\"name\":\"Taobao\",\"info\":[\"淘宝\",\"网购\"]}]}";
//解析对象JObject
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string sites = jo["sites"].ToString();
//解析数组JArray
JArray jArray = (JArray)JsonConvert.DeserializeObject(sites);
//循环遍历sites数组
for (int i = 0; i < jArray.Count; i++)
{
  //解析对象JObject
  JObject j = JObject.Parse(jArray[i].ToString());
  string info = j["info"].ToString();
  //解析数组JArray
  JArray jArray2 = (JArray)JsonConvert.DeserializeObject(info);
  //循环遍历info数组
  for (int k = 0; k < jArray2.Count; k++)
  {
    Console.WriteLine(jArray2[k]);
  }
}

到此这篇关于C#实现解析JSON的示例详解的文章就介绍到这了,更多相关C#解析JSON内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C#中abstract的用法详解

    C#中abstract的用法详解

    abstract可以用来修饰类,方法,属性,索引器和时间,这里不包括字段. 使用abstrac修饰的类,该类只能作为其他类的基类,不能实例化,而且abstract修饰的成员在派生类中必须全部实现,不允许部分实现,否则编译异常
    2016-12-12
  • Winform中GridView分组排序功能实现方法

    Winform中GridView分组排序功能实现方法

    这篇文章主要介绍了Winform中GridView分组排序功能实现方法,以实例形式详细说明了分组排序的实现方法,并附带完整的DBHelp类代码,是非常实用的技巧,需要的朋友可以参考下
    2014-11-11
  • c# 设置TeeChart控件的提示文本

    c# 设置TeeChart控件的提示文本

    这篇文章主要介绍了c# 如何设置TeeChart控件的提示文本,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下
    2020-11-11
  • C#使用RabbitMQ发送和接收消息工具类的实现

    C#使用RabbitMQ发送和接收消息工具类的实现

    RabbitMQ是一个消息的代理器,用于接收和发送消息,本文主要介绍了C#使用RabbitMQ发送和接收消息工具类的实现,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • C#启动进程的几种常用方法

    C#启动进程的几种常用方法

    这篇文章主要介绍了C#启动进程的几种常用方法,实例分析了C#对系统进行的相关操作技巧,需要的朋友可以参考下
    2015-05-05
  • C#访问SqlServer设置链接超时的方法

    C#访问SqlServer设置链接超时的方法

    这篇文章主要介绍了C#访问SqlServer设置链接超时的方法,涉及CommandTimeout属性的相关设置技巧,非常简单实用,需要的朋友可以参考下
    2015-06-06
  • C# try catch 使用实例详解

    C# try catch 使用实例详解

    在编程中, try-catch-throw 是一种常见的错误处理模式,这三个关键字通常一起使用,以捕获异常、处理异常和重新抛出异常,这篇文章主要介绍了C# try catch 使用,需要的朋友可以参考下
    2023-09-09
  • 深入Resource实现多语言支持的应用详解

    深入Resource实现多语言支持的应用详解

    本篇文章是对Resource实现多语言支持的应用进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • C#拷贝文件简单实现方法

    C#拷贝文件简单实现方法

    这篇文章主要介绍了C#拷贝文件简单实现方法,主要分析了FileInfo类中CopyTo方法针对文件复制的操作技巧,非常简单实用,需要的朋友可以参考下
    2015-04-04
  • C#校验时间格式的场景分析

    C#校验时间格式的场景分析

    本文通过场景分析给大家讲解C#里如何简单的校验时间格式,本次的场景属于比较常见的收单API,对第三方的订单进行签名验证,然后持久化到数据库,需要的朋友跟随小编一起看看吧
    2022-08-08

最新评论