日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > javascript >内容正文

javascript

JSON学习资料整理

發(fā)布時(shí)間:2023/12/1 javascript 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSON学习资料整理 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  1.什么是JSON

  JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于JavaScript的一個(gè)子集。 JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類似于C語(yǔ)言家族的習(xí)慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成。

  2.JSON語(yǔ)法規(guī)則

  JSON 語(yǔ)法是 JavaScript 對(duì)象表示法語(yǔ)法的子集。

  l? 數(shù)據(jù)在名稱/值對(duì)中

  l? 數(shù)據(jù)由逗號(hào)分隔

  l? 花括號(hào)保存對(duì)象

  l? 方括號(hào)保存數(shù)組

  JSON 數(shù)據(jù)的書寫格式是:名稱/值對(duì)。

  名稱/值對(duì)包括字段名稱(在雙引號(hào)中),后面寫一個(gè)冒號(hào),然后是值:

  "firstName" : "John"

  這很容易理解,等價(jià)于這條 JavaScript 語(yǔ)句:

  firstName = "John"

  JSON 值可以是:

  l? 數(shù)字(整數(shù)或浮點(diǎn)數(shù))

  l? 字符串(在雙引號(hào)中)

  l? 邏輯值(true 或 false)

  l? 數(shù)組(在方括號(hào)中)

  l? 對(duì)象(在花括號(hào)中)

  l? null

  JSON在線校驗(yàn)格式化工具:bejson

  3.JSON基礎(chǔ)結(jié)構(gòu)

  JSON建構(gòu)有兩種結(jié)構(gòu)

  JSON簡(jiǎn)單說(shuō)就是javascript中的對(duì)象和數(shù)組,所以這兩種結(jié)構(gòu)就是對(duì)象和數(shù)組兩種結(jié)構(gòu),通過(guò)這兩種結(jié)構(gòu)可以表示各種復(fù)雜的結(jié)構(gòu)。

  1、對(duì)象:對(duì)象在js中表示為“{}”括起來(lái)的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 {key:value,key:value,...}的鍵值對(duì)的結(jié)構(gòu),在面向?qū)ο蟮恼Z(yǔ)言中,key為對(duì)象的屬性,value為對(duì)應(yīng)的屬性值,所以很容易理解,取值方法為 對(duì)象.key 獲取屬性值,這個(gè)屬性值的類型可以是 數(shù)字、字符串、數(shù)組、對(duì)象幾種。

  2、數(shù)組:數(shù)組在js中是中括號(hào)“[]”括起來(lái)的內(nèi)容,數(shù)據(jù)結(jié)構(gòu)為 ["java","javascript","vb",...],取值方式和所有語(yǔ)言中一樣,使用索引獲取,字段值的類型可以是 數(shù)字、字符串、數(shù)組、對(duì)象幾種。

  經(jīng)過(guò)對(duì)象、數(shù)組2種結(jié)構(gòu)就可以組合成復(fù)雜的數(shù)據(jù)結(jié)構(gòu)了。

  4.JSON基礎(chǔ)示例

  簡(jiǎn)單地說(shuō),JSON 可以將 JavaScript 對(duì)象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后就可以在函數(shù)之間輕松地傳遞這個(gè)字符串,或者在異步應(yīng)用程序中將字符串從 Web 客戶機(jī)傳遞給服務(wù)器端程序。這個(gè)字符串看起來(lái)有點(diǎn)兒古怪,但是JavaScript很容易解釋它,而且 JSON 可以表示比"名稱 / 值對(duì)"更復(fù)雜的結(jié)構(gòu)。例如,可以表示數(shù)組和復(fù)雜的對(duì)象,而不僅僅是鍵和值的簡(jiǎn)單列表。

  名稱 / 值對(duì)

  按照最簡(jiǎn)單的形式,可以用下面這樣的 JSON 表示"名稱 / 值對(duì)":

  { "firstName": "Brett" }

  這個(gè)示例非常基本,而且實(shí)際上比等效的純文本"名稱 / 值對(duì)"占用更多的空間:

  firstName=Brett

  但是,當(dāng)將多個(gè)"名稱 / 值對(duì)"串在一起時(shí),JSON 就會(huì)體現(xiàn)出它的價(jià)值了。首先,可以創(chuàng)建包含多個(gè)"名稱 / 值對(duì)"的 記錄,比如:

  { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }

  從語(yǔ)法方面來(lái)看,這與"名稱 / 值對(duì)"相比并沒有很大的優(yōu)勢(shì),但是在這種情況下 JSON 更容易使用,而且可讀性更好。例如,它明確地表示以上三個(gè)值都是同一記錄的一部分;花括號(hào)使這些值有了某種聯(lián)系。

  表示數(shù)組

  當(dāng)需要表示一組值時(shí),JSON 不但能夠提高可讀性,而且可以減少?gòu)?fù)雜性。例如,假設(shè)您希望表示一個(gè)人名列表。在XML中,需要許多開始標(biāo)記和結(jié)束標(biāo)記;如果使用典型的名稱 / 值對(duì)(就像在本系列前面文章中看到的那種名稱 / 值對(duì)),那么必須建立一種專有的數(shù)據(jù)格式,或者將鍵名稱修改為 person1-firstName這樣的形式。

  如果使用 JSON,就只需將多個(gè)帶花括號(hào)的記錄分組在一起:

1 2 3 4 5 6 7 { "people": [ ????????????????{ "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }, ????????????????{ "firstName": "Jason", "lastName":"Hunter", "email": "bbbb"}, ????????????????{ "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" } ????????????] }

  這不難理解。在這個(gè)示例中,只有一個(gè)名為 people的變量,值是包含三個(gè)條目的數(shù)組,每個(gè)條目是一個(gè)人的記錄,其中包含名、姓和電子郵件地址。上面的示例演示如何用括號(hào)將記錄組合成一個(gè)值。當(dāng)然,可以使用相同的語(yǔ)法表示多個(gè)值(每個(gè)值包含多個(gè)記錄):

1 2 3 4 5 6 7 8 9 10 11 12 13 14 { "programmers": [ { "firstName": "Brett", "lastName":"McLaughlin", "email": "aaaa" }, { "firstName": "Jason", "lastName":"Hunter", "email": "bbbb" }, { "firstName": "Elliotte", "lastName":"Harold", "email": "cccc" } ], "authors": [ { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" }, { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" }, { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" } ], "musicians": [ { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" }, { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" } ] }

  這里最值得注意的是,能夠表示多個(gè)值,每個(gè)值進(jìn)而包含多個(gè)值。但是還應(yīng)該注意,在不同的主條目(programmers、authors 和 musicians)之間,記錄中實(shí)際的名稱 / 值對(duì)可以不一樣。JSON 是完全動(dòng)態(tài)的,允許在 JSON 結(jié)構(gòu)的中間改變表示數(shù)據(jù)的方式。

  在處理 JSON 格式的數(shù)據(jù)時(shí),沒有需要遵守的預(yù)定義的約束。所以,在同樣的數(shù)據(jù)結(jié)構(gòu)中,可以改變表示數(shù)據(jù)的方式,甚至可以以不同方式表示同一事物。

  5.JSON和XML比較

  可讀性

  JSON和XML的可讀性可謂不相上下,一邊是簡(jiǎn)易的語(yǔ)法,一邊是規(guī)范的標(biāo)簽形式,很難分出勝負(fù)。

  可擴(kuò)展性

  XML天生有很好的擴(kuò)展性,JSON當(dāng)然也有,沒有什么是XML能擴(kuò)展,而JSON卻不能擴(kuò)展的。不過(guò)JSON在Javascript主場(chǎng)作戰(zhàn),可以存儲(chǔ)Javascript復(fù)合對(duì)象,有著xml不可比擬的優(yōu)勢(shì)。

  編碼難度、解碼難度(略)

  實(shí)例比較

  XML和JSON都使用結(jié)構(gòu)化方法來(lái)標(biāo)記數(shù)據(jù),下面來(lái)做一個(gè)簡(jiǎn)單的比較。

  用XML表示中國(guó)部分省市數(shù)據(jù)如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 <?xml version="1.0" encoding="utf-8"?> <country> ????<name>中國(guó)</name> ????<province> ????????<name>黑龍江</name> ????????<cities> ????????????<city>哈爾濱</city> ????????????<city>大慶</city> ????????</cities> ????</province> ????<province> ????????<name>廣東</name> ????????<cities> ????????????<city>廣州</city> ????????????<city>深圳</city> ????????????<city>珠海</city> ????????</cities> ????</province> ????<province> ????????<name>臺(tái)灣</name> ????????<cities> ????????????<city>臺(tái)北</city> ????????????<city>高雄</city> ????????</cities> ????</province> ????<province> ????????<name>新疆</name> ????????<cities> ????????????<city>烏魯木齊</city> ????????</cities> ????</province> </country>

  用JSON表示如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 { ????"name":"中國(guó)", ????"province":[ ????{ ???????"name":"黑龍江", ????????"cities":{ ????????????"city":["哈爾濱","大慶"] ????????} ?????}, ?????{ ????????"name":"廣東", ????????"cities":{ ????????????"city":["廣州","深圳","珠海"] ????????} ????}, ????{ ????????"name":"臺(tái)灣", ????????"cities":{ ????????????"city":["臺(tái)北","高雄"] ????????} ????}, ????{ ????????"name":"新疆", ????????"cities":{ ????????????"city":["烏魯木齊"] ????????} ????} ] }

  6. .NET操作JSON

  JSON文件讀入到內(nèi)存中就是字符串,.NET操作JSON就是生成與解析JSON字符串。操作JSON通常有以下幾種方式:

  1. 原始方式:自己按照J(rèn)SON的語(yǔ)法格式,寫代碼直接操作JSON字符串。如非必要,應(yīng)該很少人會(huì)走這條路,從頭再來(lái)的。

  2. 通用方式:這種方式是使用開源的類庫(kù)Newtonsoft.Json(下載地址http://json.codeplex.com/)。下載后加入工程就能用。通??梢允褂肑Object, JsonReader, JsonWriter處理。這種方式最通用,也最靈活,可以隨時(shí)修改不爽的地方。

  (1)使用JsonReader讀Json字符串:

1 2 3 4 5 6 string jsonText = @"{""input"" : ""value"", ""output"" : ""result""}"; JsonReader reader = new JsonTextReader(new StringReader(jsonText)); while (reader.Read()) { ????Console.WriteLine(reader.TokenType + "\t\t" + reader.ValueType + "\t\t" + reader.Value); }

  (2)使用JsonWriter寫字符串:

1 2 3 4 5 6 7 8 9 10 11 StringWriter sw = new StringWriter(); JsonWriter writer = new JsonTextWriter(sw); writer.WriteStartObject(); writer.WritePropertyName("input"); writer.WriteValue("value"); writer.WritePropertyName("output"); writer.WriteValue("result"); writer.WriteEndObject(); writer.Flush(); string jsonText = sw.GetStringBuilder().ToString(); Console.WriteLine(jsonText);

  (3)使用JObject讀寫字符串:

1 2 JObject jo = JObject.Parse(jsonText); string[] values = jo.Properties().Select(item => item.Value.ToString()).ToArray();

  (4)使用JsonSerializer讀寫對(duì)象(基于JsonWriter與JsonReader):

1 2 3 4 5 6 7 8 Project p = new Project() { Input = "stone", Output = "gold" }; JsonSerializer serializer = new JsonSerializer(); StringWriter sw = new StringWriter(); serializer.Serialize(new JsonTextWriter(sw), p); Console.WriteLine(sw.GetStringBuilder().ToString()); StringReader sr = new StringReader(@"{""Input"":""stone"", ""Output"":""gold""}"); Project p1 = (Project)serializer.Deserialize(new JsonTextReader(sr), typeof(Project)); Console.WriteLine(p1.Input + "=>" + p1.Output);

  上面的代碼都是基于下面這個(gè)Project類定義:

1 2 3 4 5 class Project { ????public string Input { get; set; } ????public string Output { get; set; } }

  此外,如果上面的JsonTextReader等類編譯不過(guò)的話,說(shuō)明是我們自己修改過(guò)的類,換成你們自己的相關(guān)類就可以了,不影響使用。

  3. 內(nèi)置方式:使用.NET Framework 3.5/4.0中提供的System.Web.Script.Serialization命名空間下的JavaScriptSerializer類進(jìn)行對(duì)象的序列化與反序列化,很直接。

1 2 3 4 5 6 7 Project p = new Project() { Input = "stone", Output = "gold" }; JavaScriptSerializer serializer = new JavaScriptSerializer(); var json = serializer.Serialize(p); Console.WriteLine(json); var p1 = serializer.Deserialize<Project>(json); Console.WriteLine(p1.Input + "=>" + p1.Output); Console.WriteLine(ReferenceEquals(p,p1));

  注意:如果使用的是VS2010,則要求當(dāng)前的工程的Target Framework要改成.Net Framework 4,不能使用Client Profile。當(dāng)然這個(gè)System.Web.Extensions.dll主要是Web使用的,直接在Console工程中用感覺有點(diǎn)浪費(fèi)資源。

  此外,從最后一句也可以看到,序列化與反序列化是深拷貝的一種典型的實(shí)現(xiàn)方式。

  更新1:

  注意用System.Web.Script.Serialization的時(shí)候,序列化沒問題,反序列化會(huì)將DateTime賦值成了UTC時(shí)間。

  UTC時(shí)間 + 時(shí)區(qū)差 = 本地時(shí)間

  6:02 + (+0800) = 14:02(北京時(shí)間)

1 2 3 4 5 6 7 DateTime dt = DateTime.Now; JavaScriptSerializer serializer = new JavaScriptSerializer(); var json = serializer.Serialize(dt); Console.WriteLine(json); var dt1 = serializer.Deserialize<DateTime>(json); Response.Write(dt1.ToString()+"<br />"); Response.Write(ReferenceEquals(dt, dt1));

?  關(guān)于UTC時(shí)間與北京時(shí)間的區(qū)別請(qǐng)移步:UTC時(shí)間與北京時(shí)間差多久?

  4. 契約方式:使用System.Runtime.Serialization.dll提供的DataContractJsonSerializer或者 JsonReaderWriterFactory實(shí)現(xiàn)。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Project p = new Project() { Input = "stone", Output = "gold" }; DataContractJsonSerializer serializer = new DataContractJsonSerializer(p.GetType()); string jsonText; ?? using (MemoryStream stream = new MemoryStream()) { ????serializer.WriteObject(stream, p); ????jsonText = Encoding.UTF8.GetString(stream.ToArray()); ????Console.WriteLine(jsonText); } using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonText))) { ????DataContractJsonSerializer serializer1 = new DataContractJsonSerializer(typeof(Project)); ????Project p1 = (Project)serializer1.ReadObject(ms); ????Console.WriteLine(p1.Input + "=>" + p1.Output); }

  這里要注意,這里的Project類和成員要加相關(guān)的Attribute:

1 2 3 4 5 6 7 8 [DataContract] class Project { ????[DataMember] ????public string Input { get; set; } ????[DataMember] ????public string Output { get; set; } }

  實(shí)用參考:

  JSON驗(yàn)證工具:http://jsonlint.com/

  JSON簡(jiǎn)明教程:http://www.w3school.com.cn/json/

  Newtonsoft.Json類庫(kù)下載:http://json.codeplex.com/

  通過(guò)序列化將.net對(duì)象轉(zhuǎn)換為JSON字符串

  在web開發(fā)過(guò)程中,我們經(jīng)常需要將從數(shù)據(jù)庫(kù)中查詢到的數(shù)據(jù)(一般為一個(gè)集合,列表或數(shù)組等)轉(zhuǎn)換為JSON格式字符串傳回客戶端,這就需要進(jìn)行序列化,這里用到的是JsonConvert對(duì)象的SerializeObject方法。其語(yǔ)法格式為:JsonConvert.SerializeObject(object),代碼中的”object”就是要序列化的.net對(duì)象,序列化后返回的是json字符串。

  比如,現(xiàn)在我們有一個(gè)TStudent的學(xué)生表,表中的字段和已有數(shù)據(jù)如圖所示

?

  從表中我們可以看到一共有五條數(shù)據(jù),現(xiàn)在我們要從數(shù)據(jù)庫(kù)中取出這些數(shù)據(jù),然后利用JSON.NET的JsonConvert對(duì)象序列化它們?yōu)閖son字符串,并顯示在頁(yè)面上。C#代碼如下

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 protected void Page_Load(object sender, EventArgs e) ????????{ ????????????using (L2SDBDataContext db = new L2SDBDataContext()) ????????????{ ????????????????List<Student> studentList = new List<Student>(); ????????????????var query = from s in db.TStudents ????????????????????????????select new { ????????????????????????????????StudentID=s.StudentID, ????????????????????????????????Name=s.Name, ????????????????????????????????Hometown=s.Hometown, ????????????????????????????????Gender=s.Gender, ????????????????????????????????Brithday=s.Birthday, ????????????????????????????????ClassID=s.ClassID, ????????????????????????????????Weight=s.Weight, ????????????????????????????????Height=s.Height, ????????????????????????????????Desc=s.Desc ????????????????????????????}; ????????????????foreach (var item in query) ????????????????{ ????????????????????Student student = new Student { StudentID=item.StudentID,Name=item.Name,Hometown=item.Hometown,Gender=item.Gender,Brithday=item.Brithday,ClassID=item.ClassID,Weight=item.Weight,Height=item.Height,Desc=item.Desc}; ????????????????????studentList.Add(student); ????????????????} ????????????????lbMsg.InnerText = JsonConvert.SerializeObject(studentList); ????????????} ????????}

  輸出結(jié)果:

  從圖中我們可以看到,數(shù)據(jù)庫(kù)中的5條記錄全部取出來(lái)并轉(zhuǎn)化為json字符串了。

  使用LINQ to JSON定制JSON數(shù)據(jù)

  使用JsonConvert對(duì)象的SerializeObject只是簡(jiǎn)單地將一個(gè)list或集合轉(zhuǎn)換為json字符串。但是,有的時(shí)候我們的前端框架比如ExtJs對(duì)服務(wù)端返回的數(shù)據(jù)格式是有一定要求的,比如下面的數(shù)據(jù)格式,這時(shí)就需要用到JSON.NET的LINQ to JSON,LINQ to JSON的作用就是根據(jù)需要的格式來(lái)定制json數(shù)據(jù)。

  比如經(jīng)常用在分頁(yè)的json格式如代碼:

1 2 3 4 5 6 { ????"total": 5, //記錄總數(shù) ????"rows":[ ????????//json格式的數(shù)據(jù)列表 ????] }

  使用LINQ to JSON前,需要引用Newtonsoft.Json的dll和using Newtonsoft.Json.Linq的命名空間。LINQ to JSON主要使用到JObject, JArray, JProperty和JValue這四個(gè)對(duì)象,JObject用來(lái)生成一個(gè)JSON對(duì)象,簡(jiǎn)單來(lái)說(shuō)就是生成”{}”,JArray用來(lái)生成一個(gè)JSON數(shù)組,也就是”[]”,JProperty用來(lái)生成一個(gè)JSON數(shù)據(jù),格式為key/value的值,而JValue則直接生成一個(gè)JSON值。下面我們就用LINQ to JSON返回上面分頁(yè)格式的數(shù)據(jù)。代碼如下:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 protected void Page_Load(object sender, EventArgs e) ????????{ ????????????using (L2SDBDataContext db = new L2SDBDataContext()) ????????????{ ????????????????//從數(shù)據(jù)庫(kù)中取出數(shù)據(jù)并放到列表list中 ????????????????List<Student> studentList = new List<Student>(); ????????????????var query = from s in db.TStudents ????????????????????????????select new ????????????????????????????{ ????????????????????????????????StudentID = s.StudentID, ????????????????????????????????Name = s.Name, ????????????????????????????????Hometown = s.Hometown, ????????????????????????????????Gender = s.Gender, ????????????????????????????????Brithday = s.Birthday, ????????????????????????????????ClassID = s.ClassID, ????????????????????????????????Weight = s.Weight, ????????????????????????????????Height = s.Height, ????????????????????????????????Desc = s.Desc ????????????????????????????}; ????????????????foreach (var item in query) ????????????????{ ????????????????????Student student = new Student { StudentID = item.StudentID, Name = item.Name, Hometown = item.Hometown, Gender = item.Gender, Brithday = item.Brithday, ClassID = item.ClassID, Weight = item.Weight, Height = item.Height, Desc = item.Desc }; ????????????????????studentList.Add(student); ????????????????} ?? ????????????????//基于創(chuàng)建的list使用LINQ to JSON創(chuàng)建期望格式的JSON數(shù)據(jù) ????????????????lbMsg.InnerText = new JObject( ????????????????????????new JProperty("total",studentList.Count), ????????????????????????new JProperty("rows", ????????????????????????????????new JArray( ????????????????????????????????????????//使用LINQ to JSON可直接在select語(yǔ)句中生成JSON數(shù)據(jù)對(duì)象,無(wú)須其它轉(zhuǎn)換過(guò)程 ????????????????????????????????????????from p in studentList ????????????????????????????????????????select new JObject( ????????????????????????????????????????????????new JProperty("studentID",p.StudentID), ????????????????????????????????????????????????new JProperty("name",p.Name), ????????????????????????????????????????????????new JProperty("homeTown",p.Hometown) ????????????????????????????????????????????) ????????????????????????????????????) ????????????????????????????) ????????????????????).ToString(); ????????????} ????????}

  輸出結(jié)果為:

  處理客戶端提交的JSON數(shù)據(jù)

  客戶端提交過(guò)來(lái)的數(shù)據(jù)一般都是json字符串,有了更好地進(jìn)行操作(面向?qū)ο蟮姆绞?#xff09;,所以我們一般都會(huì)想辦法將json字符串轉(zhuǎn)換為json對(duì)象。例如客戶端提交了以下數(shù)組格式j(luò)son字符串。

1 2 3 4 5 [ ????{StudentID:"100",Name:"aaa",Hometown:"china"}, ????{StudentID:"101",Name:"bbb",Hometown:"us"}, ????{StudentID:"102",Name:"ccc",Hometown:"england"} ]

  在服務(wù)端就可以使用JObject或JArray的Parse方法輕松地將json字符串轉(zhuǎn)換為json對(duì)象,然后通過(guò)對(duì)象的方式提取數(shù)據(jù)。下面是服務(wù)端代碼。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 protected void Page_Load(object sender, EventArgs e) ????????{ ????????????string inputJsonString = @" ????????????????[ ????????????????????{StudentID:'100',Name:'aaa',Hometown:'china'}, ????????????????????{StudentID:'101',Name:'bbb',Hometown:'us'}, ????????????????????{StudentID:'102',Name:'ccc',Hometown:'england'} ????????????????]"; ????????????JArray jsonObj = JArray.Parse(inputJsonString); ????????????string message = @"<table border='1'> ????????????????????<tr><td width='80'>StudentID</td><td width='100'>Name</td><td width='100'>Hometown</td></tr>"; ????????????string tpl = "<tr><td>{0}</td><td>{1}</td><td>{2}</td></tr>"; ????????????foreach (JObject jObject in jsonObj) ????????????{ ????????????????message += String.Format(tpl, jObject["StudentID"], jObject["Name"],jObject["Hometown"]); ????????????} ????????????message += "</table>"; ????????????lbMsg.InnerHtml = message; ????????}

  輸出結(jié)果:

  當(dāng)然,服務(wù)端除了使用LINQ to JSON來(lái)轉(zhuǎn)換json字符串外,也可以使用JsonConvert的DeserializeObject方法。如下面代碼實(shí)現(xiàn)上面同樣的功能。

1 2 3 4 5 List<Student> studentList = JsonConvert.DeserializeObject<List<Student>>(inputJsonString);//注意這里必須為L(zhǎng)ist<Student>類型,因?yàn)榭蛻舳颂峤坏氖且粋€(gè)數(shù)組json ????????????foreach (Student student in studentList) ????????????{ ????????????????message += String.Format(tpl, student.StudentID, student.Name,student.Hometown); ????????????}

  總結(jié):

  在客戶端,讀寫json對(duì)象可以使用”.”操作符或”["key”]”,json字符串轉(zhuǎn)換為json對(duì)象使用eval()函數(shù)。

  在服務(wù)端,由.net對(duì)象轉(zhuǎn)換json字符串優(yōu)先使用JsonConvert對(duì)象的SerializeObject方法,定制輸出json字符串使用LINQ to JSON。由json字符串轉(zhuǎn)換為.net對(duì)象優(yōu)先使用JsonConvert對(duì)象的DeserializeObject方法,然后也可以使用LINQ to JSON。

轉(zhuǎn)載于:https://www.cnblogs.com/gc2013/p/3578356.html

總結(jié)

以上是生活随笔為你收集整理的JSON学习资料整理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。