1. 程式人生 > >C#高階篇-JSON相關、Excel操作

C#高階篇-JSON相關、Excel操作

1.JSON

JSON是儲存和交換文字資訊的語法。類似XML

相比XML更加輕量級,它基於ECMAScript的一個子集。

JSON採用完全獨立於語言的文字格式。 

具有自我描述性,更容易理解

 

語法規則

資料在鍵值對中

資料由逗號分隔

花括號儲存物件

方括號儲存陣列

 

JSON 名稱/值對

JSON的值可以是:

          數字(int or float)

          字串(用雙引號括起來)

          邏輯值(true or false)

          陣列(在方括號中)

          物件(在花括號中)

          null

 

2.書寫json文字、引入json庫檔案

一個簡單的json文字

[
{"id":2,"name":"豪火球","damage":66},
{"id":3,"name":"裡連環","damage":9},
{"id":4,"name":"手裡劍","damage":6},
]

引入json庫檔案可以通過專案中的引用管理NuGet程式包,聯網下載安裝

 

3.使用JsonMapper解析json資料

通過JsonMapper解析Json的文字檔案

將解析出來的data用JsonData的物件來進行儲存,通過字串索引器可以取得儲存的鍵值對的值

//使用jsonMapper解析json 返回一個jsondata代表一個數組或者物件
            JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("技能資訊.txt"));
            foreach (JsonData temp in jsonData)
            {
                JsonData idValue = temp["id"];//通過字串索引器可以取得鍵值對的值
                JsonData nameValue = temp["name"];
                JsonData damageValue = temp["damage"];
                int id = Int32.Parse(idValue.ToString());
                int damage = Int32.Parse(damageValue.ToString());
                Console.WriteLine(id + ":" + nameValue.ToString() + ":" + damage);

            }

 

4.使用JsonMapper跟泛型解析json

直接指定泛型為陣列,讓解析出來的資料返回陣列

//使用泛型解析
            Skill[] skillArray = JsonMapper.ToObject<Skill[]>(File.ReadAllText("技能資訊.txt"));
            foreach(var temp in skillArray)
            {
                Console.WriteLine(temp);
            }

 

5.將data資料轉換成json資料

Skill mySkill = new Skill();
            mySkill.id = 6;
            mySkill.damage = 99;
            mySkill.name = "whoisyourdady";
            string json = JsonMapper.ToJson(mySkill);
            Console.WriteLine(json);

 

6.json的校驗和json線上編譯器

線上Json校驗的網站

http://www.bejson.com/

json線上編譯器

http://www.bejson.com/jsoneditoronline/

 

7.Excel操作

使用OLEDB操作Excel

先建立一個Connection物件,傳遞一個連線字串

開啟連結

通過Adapter傳遞查詢命令,查詢相關資訊

將adapter資料填充到dataSet中

釋放連線資源

取得資料存放到DataTableCollection物件中

將Collection中的資料存放到DataTable物件中

將table中的資料存放到DataRowCollection中

遍歷rowCollection得到DataRow的物件
用索引器取得row中的資料

static void Main(string[] args)
        {
            string fileName = "裝備資訊.xls";
            string connectionString = 
                "Provider=Microsoft.Jet.OLEDB.4.0;" + 
                "Data Source=" +fileName + ";" + ";" +
                "Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";

            //用來跟資料來源建立連線
            OleDbConnection connection = new OleDbConnection(connectionString);
            //開啟連線
            connection.Open();

            string sql = "select*from [Sheet1$]";//這個是一個查詢命令
            //使用Adapter介面卡進行查詢,查詢結果是一個表格
            OleDbDataAdapter adapter = new OleDbDataAdapter(sql,connection);
            //使用DataSet來存放資料
            DataSet dataSet = new DataSet();//用來存放DataTable
            adapter.Fill(dataSet);//表示把查詢的結果(datatable)放(填充)到dataset中
            connection.Close();

            //取得資料
            DataTableCollection tableCollection = dataSet.Tables;//獲取當前集合中所有的表格
            DataTable table = tableCollection[0];

            //取得表格中的資料
            DataRowCollection rowCollection = table.Rows;//返回一個行的集合
            foreach(DataRow row in rowCollection)
            {
                //取得row中前8列的資料
                for(int i = 0; i < 8; i++)
                {
                    Console.Write(row[i]+" ");
                }
                Console.WriteLine();
            }
            Console.ReadKey();
        }