淺談json以及一些常用的解析

1.什麼是JSON?

JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,採用完全獨立於語言的文本格式,是理想的數據交換格式。同時,JSON是 JavaScript 原生格式,這意味着在 JavaScript 中處理 JSON數據不須要任何特殊的 API 或工具包。

JSON的優點:

1、基於純文本,跨平臺傳遞極其簡單;

2、Javascript原生支持,後臺語言幾乎全部支持;

3、輕量級數據格式,佔用字符數量極少,特別適合互聯網傳遞;

4、可讀性較強,雖然比不上XML那麼一目瞭然,但在合理的依次縮進之後還是很容易識別的;

5、容易編寫和解析,當然前提是你要知道數據結構;

JSON的缺點當然也有,但在作者看來實在是無關緊要的東西,所以不再單獨說明。

 

JSON的格式或者叫規則:

JSON能夠以非常簡單的方式來描述數據結構,XML能做的它都能做,因此在跨平臺方面兩者完全不分伯仲。

1、JSON只有兩種數據類型描述符,大括號{}和方括號[],其餘英文冒號:是映射符,英文逗號,是分隔符,英文雙引號""是定義符。

2、大括號{}用來描述一組“不同類型的無序鍵值對集合”(每個鍵值對可以理解爲OOP的屬性描述),方括號[]用來描述一組“相同類型的有序數據集合”(可對應OOP的數組)。

3、上述兩種集合中若有多個子項,則通過英文逗號,進行分隔。

4、鍵值對以英文冒號:進行分隔,並且建議鍵名都加上英文雙引號"",以便於不同語言的解析。

5、JSON內部常用數據類型無非就是字符串、數字、布爾、日期、null 這麼幾個,字符串必須用雙引號引起來,其餘的都不用,日期類型比較特殊,這裏就不展開講述了,只是建議如果客戶端沒有按日期排序功能需求的話,那麼把日期時間直接作爲字符串傳遞就好,可以省去很多麻煩。

JSON的示例:

 在JSON中,有兩種結構:對象和數組。

    1. 一個對象以“{”(左括號)開始,“}”(右括號)結束。每個“名稱”後跟一個“:”(冒號);“‘名稱/值’ 對”之間運用 “,”(逗號)分隔。 名稱用引號括起來;值如果是字符串則必須用括號,數值型則不須要。例如:

{"username":"doubleone","articlecount":3,"blogurl":"http://blog.csdn.net/yishuangjia"}

  2. 數組是值(value)的有序集合。一個數組以“[”(左中括號)開始,“]”(右中括號)結束。值之間運用 “,”(逗號)分隔。

    例如:

[{"username":"doubleone","articlecount":3,"blogurl":"http://blog.csdn.net/yishuangjia"},{"username":"doubleone","articlecount":5,"blogurl":"http://blog.csdn.net/yishuangjia"}]

2.JSON的解析 

js對JSON的解析:

 var str = '{"username":"doubleone","articlecount":3,"blogurl":"http://blog.csdn.net/yishuangjia"}';
 
 var data=eval("("+str+")");//轉換爲json對象
 
 alert (data.username);//會顯示出doubleone

不過eval解析json有安全隱患!

現在大多數瀏覽器(IE8及以上,Chrome和Firefox差不多全部)自帶原生JSON對象,提供JSON.parse()方法解析JSON,提供JSON.stringify()方法生成JSON,請使用這兩個方法!

如果擔心parse()對對象拋異常,可以加一個封裝函數:

 JSON.pParse = function(tar) {
     if( typeof(tar) === 'string' ) {
         return JSON.parse(tar);
     } else {
         return tar;
     }
 };

.net對JSON的解析:

 1.在asp.net中的解析

 //需要引入命名空間
 //using System.Web.Script.Serialization;
 
 string userdata="{\"username\":\"doubleone\",\"articlecount\":3,\"blogurl\":\"http://blog.csdn.net/yishuangjia\"}";
 JavaScriptSerializer ser = new JavaScriptSerializer();
 UserInfo user = ser.Deserialize<UserInfo>(userdata);
 user.username//這個輸出就是doubleone
 
 //創建一個對象類對象裏面字段與JSON相同
 public class UserInfo
 {
     public string username;
     public int articlecount;
     public string blogurl;
 }


 

 2.使用JSON.NET

簡而言之,這是一個可以用於.NET的Json輔助工具類。它可以將對對象序列化爲json字符串。

Json.Net目前的版本是Json.NET 5.0 Release 6 

  //需要引入命名空間
  //using Newtonsoft.Json;
  string userdata = "{\"username\":\"doubleone\",\"articlecount\":3,\"blogurl\":\"http://blog.csdn.net/yishuangjia\"}";
  UserInfo user=JsonConvert.DeserializeObject<UserInfo>(userdata);//將json轉成UserInfo對象
  Console.WriteLine(user.username);//輸出doubleone
  
  //創建一個對象類對象裏面字段與JSON相同
  public class UserInfo
  {
     public string username;
     public int articlecount;
     public string blogurl;
 }


以上就是JSON的一點認識。歡迎各位大大給一些指點。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章