https://blog.csdn.net/weixin_43046974/article/details/131449900
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.Jsonusing 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\"}}";//解析对象JObjectJObject 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\"}]"; //解析数组JArrayJArray 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\"]}";//解析对象JObjectJObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);string sites = jo["sites"].ToString();//解析数组JArrayJArray 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\":[\"淘宝\",\"网购\"]}]}";//解析对象JObjectJObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);string sites = jo["sites"].ToString();//解析数组JArrayJArray 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]); }