c#學習教程之JSON文件及解析實例
一、JSON文件介紹
JSON是存儲和交換文本的語法,類似於XML
但比XML更小,更容易解析,於XML一樣是一種數據格式
JSON是一種輕量級的數據交換格式,采用完全獨立於語言的文本格式,更容易編寫以及解析
例如
[ {"id":2,"name":"星河爆破","number":999}, {"id":3,"name":"九星連珠","number":9}, {"id":4,"name":"一語成讖","number":999} ]
二、JSO語法規則
- 數據保存在鍵值對中
- 數據由逗號分割
- 花括號保存對象
- 方括號保存數組
三、引入JSON庫文件
JSON解析器和JSON庫支持許多不同的編程語言
能對json文件進行解析的有很多,詳見JSON官網,http://www.json.org/json-en.html
在主要是使用的是LitJSON或者Newtonsoft.Json,LitJSON使用NuGet安裝,界面如下
四、利用JSON.Mapper去解析JSON文件
4.1 JSON為數組
原始json內容
json.txt:
[ {"id":2,"name":"星河爆破","number":999}, {"id":3,"name":"九星連珠","number":9}, {"id":4,"name":"一語成讖","number":999} ]
思想:
1.利用File去讀取json文件
2.通過JsonMapper轉為對象(jsondata)
3.使用索引,遍歷jsondata進行輸出
代碼:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; //引入LitJson using LitJson; namespace json操作 { class Program { static void Main(string[] args) { //JsonMapper類 //ToObject方法可以將一個json字符串進行解析, //解析的結果是json.date //我們使用jsonMapper去解析json文本 //jsondata代表一個數據或者對象 //json217.txt為數組[],所以jsonData為數組 //註意json文件位置,需要在bug目錄下 JsonData jsonData =JsonMapper.ToObject(File.ReadAllText("json217.txt")) ; //使用foreach去遍歷數組信息 //temp也是jsondata類型的,但是temp是一個對象 foreach (JsonData temp in jsonData) { //通過索引其去取得temp中的value //返回值還是jsondata類型 JsonData idvalue = temp["id"]; JsonData namevalue = temp["name"]; JsonData numbervalue = temp["number"]; //將jsondata轉化為字符串進行輸出 //name本身就為str,所以不用轉換 int id = Int32.Parse(idvalue.ToString()); int number = Int32.Parse(numbervalue.ToString()); //輸出 Console.WriteLine(id+":"+ namevalue + ":" + number); } Console.ReadKey(); } } }
運行結果:
4.2 JSON為數組,使用實體類
原始json內容
json217.txt:
[ {"id":2,"name":"星河爆破","number":999}, {"id":3,"name":"九星連珠","number":9}, {"id":4,"name":"一語成讖","number":999} ]
思想:
1.根據JSON文件格式,建立實體類,例如根據json217.txt建立實體類Magic,包含id、name、number三個字段以及一個方法
2.根據json格式,新建list,使用Magic實體類作為泛型,新建magicList類
List<Magic> magicList = new List<Magic>();
3.通過JsonMapper轉為對象(jsondata),賦值到magicList中
4.對magicList進行遍歷輸出
新建一個Magic實體類用於解析
Magic.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace json操作 { class Magic { public int id; public string name; public int number; public override string ToString() { return string.Format("id:{0},name:{1},numebr:{2}",id,name,number); } } }
代碼:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; //引入LitJson using LitJson; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace json操作 { class Program { static void Main(string[] args) { //因為json文件為集合,所以新建一個集合 List<Magic> magicList = new List<Magic>(); //依舊使用JsonMapper去進行解析 JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("json217.txt")); foreach (JsonData temp in jsonData) { //創建一個新對象 Magic magic = new Magic(); //通過索引其去取得temp中的value //返回值還是jsondata類型 JsonData idvalue = temp["id"]; JsonData namevalue = temp["name"]; JsonData numbervalue = temp["number"]; //將jsondata轉化為字符串進行輸出 //name本身就為str,所以不用轉換 int id = Int32.Parse(idvalue.ToString()); int number = Int32.Parse(numbervalue.ToString()); magic.id = id; magic.number = number; magic.name = namevalue.ToString(); magicList.Add(magic); } foreach (var temp in magicList) { Console.WriteLine(temp); } Console.ReadKey(); } } }
運行結果:
可以發現,結果是一樣的,但是如此做會增加代碼量,不夠方便,下面介紹通過泛型去解析JSON
五、利用Json.MApper結合泛型去解析JSON文件
5.1JSON為數組
原始json內容
json217.txt:
[ {"id":2,"name":"星河爆破","number":999}, {"id":3,"name":"九星連珠","number":9}, {"id":4,"name":"一語成讖","number":999} ]
思想:
1.對JSON文件進行解析,發現為外層為數組格式,可以認為是一個Magic對象數組
2.使用泛型去解析,用<>表示泛型,如下一個Magic對象數組表示為Magic[]
JsonMapper.ToObject<Magic[]>
註意:json裡面的鍵必須與實體類對應
3.遍歷Magic[]
代碼:
namespace json操作 { class Program { static void Main(string[] args) { //使用泛型去解析json //因為讀取的文件格式為magic實體類的數組,所以返回是個magic的數組 //註意實體類需要對應上, Magic[] magicArray=JsonMapper.ToObject<Magic[]>(File.ReadAllText("json217.txt")); foreach(var temp in magicArray) { Console.WriteLine(temp); } Console.Read(); } } }
運行結果:
5.2JSON為數組,使用集合去解析
思想:
1.對JSON文件進行解析,發現為外層為數組格式,也可以認為是個集合
2.使用泛型去解析,用<>表示泛型,如下一個Magic對象數組表示為Magic[]
JsonMapper.ToObject<Magic[]>改為JsonMapper.ToObject<List<Magic>>
註意:json裡面的鍵必須與實體類對應
3.遍歷List<Magic
代碼:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; //引入LitJson using LitJson; namespace json操作 { class Program { static void Main(string[] args) { //任何可以數組的地方都可以使用一個集合 List<Magic> magicklist = JsonMapper.ToObject<List<Magic>>(File.ReadAllText("json217.txt")); foreach (var temp in magicklist) { Console.WriteLine(temp); } Console.Read(); } } }
運行結果:
5.3JSON為對象
原始json內容
TextFlie.txt:
{ "status": 1, "apiId": "89757", "date": "2022 / 01 / 24 13: 12: 10", "message": null, "devicelist": [{ "productcode": "126345", "devicecode": "15632478", "url": "http://sssss/sssss/ssss/ssss" }, { "productcode": "222222", "devicecode": "222222", "url": "http://sssss/sssss/ssss/ssss" }, { "productcode": "333333", "devicecode": "333333", "url": "http://sssss/sssss/ssss/ssss" } ] }
思想:
1.對JSON文件進行解析,發現為整體為對象,對象中包括status、apiId、date、message、devicelist屬性
2.建立實體類模型,新建類IotDevice類,分為IotDevice類和DevicelistItem類
IotDevice類包含:status、apiId、date、message、devicelist(繼承與DevicelistItem)
DevicelistItem類包含:productcode、devicecode、url
有點像俄羅斯套娃的感覺
3.使用json.mapper<實體類>進行解析,返回值為實體類的對象
重點:建立實體類
IotDevice.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace json操作 { public class DevicelistItem { public string productcode { get; set; } public string devicecode { get; set; } public string url { get; set; } public override string ToString() { return string.Format("productcode:{0},devicecode:{1},url:{2}", productcode, devicecode, url); } } public class IotDevice { public int status { get; set; } public string apiId { get; set; } public string date { get; set; } public string message { get; set; } public List<DevicelistItem> devicelist { get; set; } public override string ToString() { return string.Format("status:{0},apiId:{1},date:{2},message:{3},devicelist:{4},", status, apiId, date, message, devicelist); } } }
代碼:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; //引入LitJson using LitJson; namespace _032json操作 { class Program { static void Main(string[] args) { //json文檔整體為IotDevice類型,所以轉換的時候泛型為<IotDevice> //返回值為IotDevice對象 IotDevice iotdevice = JsonMapper.ToObject <IotDevice>(File.ReadAllText("TextFile1.txt")); Console.WriteLine(iotdevice); foreach (var temp in iotdevice.devicelist) { Console.WriteLine(temp); } Console.Read(); } } }
運行結果:
5.4復雜的JSON文件解析
原始json內容
TextFlie2.txt:
在這裡插入代碼片
六、字符串轉化為JSON
代碼:
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; //引入LitJson using LitJson; using Newtonsoft.Json; using Newtonsoft.Json.Linq; namespace json操作 { class Program { static void Main(string[] args) { //新建IotDevice的實體類 IotDevice device1 = new IotDevice(); device1.date = "2022/02/17"; device1.apiId = "89757"; //轉為json的字符串 string json = JsonMapper.ToJson(device1); Console.WriteLine(json); Console.Read(); } } }
運行結果:
七、JSON常用工具
1.JSON格式校驗工具
可以用來對寫的JSON文檔進行校驗,確保書寫正確
地址:http://tools.jb51.net/code/json
2.JSON數據生成c#實體類
當JSON設計多層時,可以使用工具,自動生成實體類模板
地址:http://tools.jb51.net/code/json2csharp
總結
到此這篇關於c#學習教程之JSON文件及解析的文章就介紹到這瞭,更多相關c# JSON文件解析內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!