C#實現(xiàn)解析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一般構(gòu)成及解析方法
JSON序列化與反序列化
JSON序列化:將對象轉(zhuǎn)換成JSON 字符串
JSON反序列化:將JSON 字符串轉(zhuǎn)換成對象
JSON結(jié)構(gòu)(2種)
(1)對象結(jié)構(gòu):{}
{key1:value1,key2:value2...}
key的數(shù)據(jù)類型:字符串value的數(shù)據(jù)類型:字符串、數(shù)值、null、json數(shù)組[]、json對象{}
(2)數(shù)組結(jié)構(gòu):[]
JSON數(shù)組結(jié)構(gòu):[value1,value2......]
value的數(shù)據(jù)類型:字符串、數(shù)值、null、json數(shù)組[]、json對象{}
C#代碼解析JSON
使用Visual Studio調(diào)試代碼,使用C#中的Newtonsoft庫來解析JSON,添加引用
using Newtonsoft.Json using Newtonsoft.Json.Linq
解析規(guī)則(重要)
針對對象結(jié)構(gòu){},使用JObject解析
針對數(shù)組結(jié)構(gòu)[],使用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數(shù)組解析1(數(shù)組循環(huán)遍歷)
JSON文本:
[
{
"a":"a1",
"b":"b1"
},
{
"a":"a2",
"b":"b2"
}
]
解析代碼如下:
string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]";
//解析數(shù)組JArray
JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);
//循環(huán)獲取數(shù)組中的內(nèi)容
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數(shù)組解析2(使用index獲取數(shù)據(jù),index從0開始計算)
JSON文本:
[
{
"a":"a1",
"b":"b1"
},
{
"a":"a2",
"b":"b2"
}
]
解析代碼如下:
string jsonArrayText = "[{\"a\":\"a1\",\"b\":\"b1\"},{\"a\":\"a2\",\"b\":\"b2\"}]";
//解析數(shù)組JArray
JArray jArray = (JArray)JsonConvert.DeserializeObject(jsonArrayText);
//獲取數(shù)組jArray中第1個(從第0開始計算)key="a"的值
string str = jArray[1]["a"].ToString();
Console.WriteLine(str);
5. JSON 對象中的數(shù)組,一層對象{}中包含數(shù)組[]
JSON文本:
{
"name":"網(wǎng)站",
"num":3,
"sites":[
"Google",
"Runoob",
"Taobao"
]
}
解析代碼如下:
string jsonText = "{\"name\":\"網(wǎng)站\", \"num\":3, \"sites\":[\"Google\",\"Runoob\",\"Taobao\"]}";
//解析對象JObject
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string sites = jo["sites"].ToString();
//解析數(shù)組JArray
JArray jArray = (JArray)JsonConvert.DeserializeObject(sites);
//獲取數(shù)組sites jArray中第0個(從第0開始計算)的值
string sitesdetails = jArray[0].ToString();
Console.WriteLine(sitesdetails);
6. 嵌套 JSON 對象中的數(shù)組,多層對象{}包含數(shù)組[]
JSON文本:
{
"name":"網(wǎng)站",
"num":2,
"sites": [
{ "name":"Google", "info":[ "Android", "Google 搜索", "Google 翻譯" ] },
{ "name":"Taobao", "info":[ "淘寶", "網(wǎng)購" ] }
]
}
解析代碼如下:
string jsonText = "{\"name\":\"網(wǎng)站\",\"num\":2,\"sites\":[{\"name\":\"Google\",\"info\":[\"Android\",\"Google搜索\",\"Google翻譯\"]},{\"name\":\"Taobao\",\"info\":[\"淘寶\",\"網(wǎng)購\"]}]}";
//解析對象JObject
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string sites = jo["sites"].ToString();
//解析數(shù)組JArray
JArray jArray = (JArray)JsonConvert.DeserializeObject(sites);
//循環(huán)遍歷sites數(shù)組
for (int i = 0; i < jArray.Count; i++)
{
//解析對象JObject
JObject j = JObject.Parse(jArray[i].ToString());
string info = j["info"].ToString();
//解析數(shù)組JArray
JArray jArray2 = (JArray)JsonConvert.DeserializeObject(info);
//循環(huán)遍歷info數(shù)組
for (int k = 0; k < jArray2.Count; k++)
{
Console.WriteLine(jArray2[k]);
}
}
到此這篇關(guān)于C#實現(xiàn)解析JSON的示例詳解的文章就介紹到這了,更多相關(guān)C#解析JSON內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c#實現(xiàn)51單片機頻率計的代碼分享(數(shù)字頻率計設計)
c#實現(xiàn)51單片機頻率計的代碼分享,大家參考使用吧2013-12-12
C# WinForm捕獲全局變量異常 SamWang解決方法
本文將介紹C# WinForm捕獲全局變量異常 SamWang解決方法,需要的朋友可以參考2012-11-11

