1. 程式人生 > >JSON的淺談和基本介紹

JSON的淺談和基本介紹

一: 什麼是JSON?


         JSON(JavaScript Object Notation) 是一種輕量級的資料交換格局。它基於ECMAScript的一個子集。 JSON選用完全獨立於言語的文字格局,但是也使用了類似於C言語宗族的習氣(包含C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使json除錯成為抱負的資料交換言語。 易於人閱覽和編寫,同時也易於機器解析和生成(一般用於提高網路傳輸速率)。


二: 在學習JavaScript的過程中,我們接觸了一種新的資料格式——JSON資料格式。JSON的全稱是”JavaScript Object Notation”,意思是

javascript物件表示法,它是一種基於文字,獨立於語言的輕量級資料交換格式。 
JSON的格式 
JSON 資料的書寫格式是鍵(名稱)/值對。 
JSON 鍵值對是用來儲存 JS 物件的一種方式,和 JS 物件的寫法也大同小異,鍵/值對包括欄位名稱(在雙引號中),後面寫一個冒號,然後是值。 
JSON 值可以是:字串(在雙引號中)、陣列(在中括號中)、數字(整數或浮點數)、邏輯值(true 或 false)、物件(在大括號中)、 null。 
JSON結構 
JSON結構有兩種結構,就是物件和陣列。通過這兩種結構可以表示各種複雜的結構。 

{"province": "Shanxi"} 可以理解為是一個包含province為Shanxi的物件, 
["Shanxi","Shandong"]這是一個包含兩個元素的陣列 
而 [{"province": "Shanxi"},{"province": "Shandong"}] 就表示包含兩個物件的陣列。 

當然了,你也可以使用 {"province":["Shanxi","Shandong"]} 來簡化上面的JSON,這是一個擁有一個name陣列的物件。  

下面是一小段JSON程式碼: 

{“skillz”: {“web”:[ {“name”: “html”, “years”: “5” }, {“name”: “css”, “years”: “3” }],”database”:[ {“name”: “sql”, “years”: “7” }]}} 

花括弧,方括弧,冒號和逗號 
花括弧表示一個“容器” 
方括號裝載陣列 
名稱和值用冒號隔開 

陣列元素通過逗號隔開 

三: Json 和 xml的區  

    1.       在可讀性方面,JSON和XML的資料可讀性基本相同。JSON和XML的可讀性可謂不相上下,一邊是建議的語法,一邊是規範的標籤形式,很難分出勝負。


  2.       在可擴充套件性方面,XML天生有很好的擴充套件性,JSON當然也有,沒有什麼是XML能擴充套件,JSON不能的。


  3.       在編碼難度方面,XML有豐富的編碼工具,比如Dom4j、JDom等,JSON也有json.org提供的工具,但是JSON的編碼明顯比XML容易許多,即使不借助工具也能寫出JSON的程式碼,可是要寫好XML就不太容易了。


  4.       在解碼難度方面,XML的解析得考慮子節點父節點,讓人頭昏眼花,而JSON的解析難度幾乎為0。這一點XML輸的真是沒話說。


   5.       在流行度方面,XML已經被業界廣泛的使用,而JSON才剛剛開始,但是在Ajax這個特定的領域,未來的發展一定是XML讓位於JSON。到時Ajax應該變成Ajaj(Asynchronous Javascript and JSON)了。

  6         JSON相對於XML來講,資料的體積小,Json與JavaScript的互動愈加方便,Json對資料的描述性比XML較差,Json的速度要遠遠快於XML

  7   從記憶體方面,json去掉了標籤,節省了大量的記憶體空間

例如 xml

<Book>

<name>name</name>

<author>

<name>authorname</name>

<age>23</age>

</author>

<year>2010</year>

</Book>

        json

{"name":"name","author":{"name":"authorname","age":23},"year":2010}

四 json 和js物件的轉換關係

很多人搞不清楚 JSON 和 JS 物件的關係,甚至連誰是誰都不清楚。其實,可以這麼理解:JSON 是 JS 物件的字串表示法,它使用文字表示一個 JS 物件的資訊,本質是一個字串。平時說的JSON物件,是JSON格式的JS物件或是符合JSON資料結構要求的JS物件。

JSON和JS物件互轉 
要實現從物件轉換為 JSON 字串,使用 JSON.stringify() 方法: 
這裡寫圖片描述
結果: 
這裡寫圖片描述 
要實現從 JSON 轉換為物件,使用 JSON.parse() 方法: 
這裡寫圖片描述
結果: 

這裡寫圖片描述 


五 :json中帶有轉義字元

比如從後臺返回這樣一段json串,中間有個欄位 reminderContent 這個String型別後面其實也是一個json串,後臺封裝資料之後就自動轉義了其中的雙引號,這個時候用Gson轉換的時候會報錯的,因為你的實體類中 reminderContent 這個欄位是String型別,但是後臺的這個資料中卻包含有轉義符號,因此無法解析成功。可以在程式碼中存在,入資料庫中必須解析

{
    "userInfo": {
        "headPicUrl": "585658179_temphead.jpg",
        "nickName": "Mia",
        "userId": 15678355887
    },
    "reminderContent": "{\"contentText\":\"我就說一句話\",\"contentTitle\":\"提醒\",\"settingTime\":1523254256000,\"or\":\"1\"}",
    "reminderId": 152352210043891,
    "reminderTime": 1523522100447,
    "reminderType": 6
}

目前本人的方法是,先把從後臺獲取的整個字串過濾一把,把其中的轉義符號替換一下,比如:

String jsonStr = "後臺獲取的資料"
jsonStr = jsonStr.replace("\\\"", "'");

然後再解析整個Json串;

ReminderEntity reminderEntity = gson.fromJson(jsonStr, ReminderEntity.class);