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.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++)
{//解析對象JObjectJObject 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++)
{//解析對象JObjectJObject j = JObject.Parse(jArray[i].ToString());string info = j["info"].ToString();//解析數組JArrayJArray jArray2 = (JArray)JsonConvert.DeserializeObject(info);//循環遍歷info數組for (int k = 0; k < jArray2.Count; k++){Console.WriteLine(jArray2[k]);}