C#解析JSON

C#解析JSON
1. JSON定义
2. JSON一般构成及解析方法
3. 解析举例子
1. JSON对象解析,只包含一层对象{}
2. 嵌套JSON对象解析,包含多层对象{}
3. JSON数组解析1(数组循环遍历)
4. JSON数组解析2(使用index获取数据,index从0开始计算)
5. JSON 对象中的数组,一层对象{}中包含数组[]
6. 嵌套 JSON 对象中的数组,多层对象{}包含数组[]
1. JSON定义
全称“JavaScript Object Notation(JavaScript对象表示法)”,JSON 是存储和交换文本信息的语法。

举例:

[
    {
        "id": 2,
        "name": "星河爆破",
        "number": 999
    },
    {
        "id": 3,
        "name": "九星连珠",
        "number": 9
    },
    {
        "id": 4,
        "name": "一语成谶",
        "number": 999
    }
]
学习JSON基础教程:学习JSON基础教程
在线JSON解析及格式化验证网站:在线JSON解析及格式化验证网站

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]);
  }

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lijingguang

有钱捧个钱场,没钱捧个人场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值