C#實(shí)現(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開始計(jì)算)
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開始計(jì)算)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開始計(jì)算)的值 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#實(shí)現(xiàn)解析JSON的示例詳解的文章就介紹到這了,更多相關(guān)C#解析JSON內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c#實(shí)現(xiàn)51單片機(jī)頻率計(jì)的代碼分享(數(shù)字頻率計(jì)設(shè)計(jì))
c#實(shí)現(xiàn)51單片機(jī)頻率計(jì)的代碼分享,大家參考使用吧2013-12-12Unity實(shí)現(xiàn)簡單換裝系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)簡單換裝系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-04-04C# WinForm捕獲全局變量異常 SamWang解決方法
本文將介紹C# WinForm捕獲全局變量異常 SamWang解決方法,需要的朋友可以參考2012-11-11C#編程實(shí)現(xiàn)DataTable添加行的方法
這篇文章主要介紹了C#編程實(shí)現(xiàn)DataTable添加行的方法,結(jié)合兩個實(shí)例形式分析了C#操作DataTable實(shí)現(xiàn)動態(tài)添加行的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-11-11