当前位置: 代码网 > it编程>编程语言>C# > C#实现解析JSON的示例详解

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

2024年05月19日 C# 我要评论
1. json定义全称“javascript object notation(javascript对象表示法)”,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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com