聊聊json

肥肥的兔子發表於2016-01-15

部分參考:


JSON是什麼鬼?

JSON不是一種程式語言,而是一種約定好的資料格式,全稱為javascript object Notation,常用於前後端的互動。

但同時因為其優點,現在也用於於配置檔案的書寫,例如大部分程式設計師喜歡用Sublime Text就用JSON寫了配置檔案。

JSON是“名稱/值”對的集合(A collection of name/value pairs)。不同的語言中,它被理解為物件(object),紀錄(record),結構(struct),字典(dictionary),雜湊表(hash table),有鍵列表(keyed list),或者關聯陣列 (associative array)。值的有序列表(An ordered list of values)。在大部分語言中,它被理解為陣列(array)。
這些都是常見的資料結構。

事實上大部分現代計算機語言都以某種形式支援它們。這使得一種資料格式在同樣基於這些結構的程式語言之間交換成為可能。

因為JSON的廣泛使用,再加上作者本人最近也在學習,便把學習筆記寫到這個專欄上,希望能夠幫到需要的人,若有錯誤歡迎指正


JSON如何表示

先來看JSON一種簡單的表示:

{"username":123,"password":456}

在這個資料中,含有兩個鍵,username和password,分別對於一個整形值123和456。
為了方便資料的交換,JSON也支援資料的巢狀使用,我們看一個複雜一點的例子:

{
    "people":[
           {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
           {"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
           {"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
       ]        
   }

在這段JSON中,有一個鍵people,對於著的資料是一個陣列,分別是三個JSON資料,每一個JSON中對應著三個鍵firstName、lastName和email


表示方式總結

  • {} 表示一個JSON物件

  • [] 表示一個陣列

  • “” 雙括號內表示的是一串字串

  • 123 整形資料,

  • 123.1浮點型資料

  • true 布林值

  • null 空

JSON支援巢狀使用,資料之間用逗號分隔開


javascript如何操作JSON

JSON作為javascript的原生資料格式,因此在js內不用呼叫額外的API或工具包就能使用

訪問JSON

例如:

var json = {
"people":[
       {"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
       {"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
       {"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
       ],
"authors": [
    {"firstName": "Isaac","lastName": "Asimov","genre": "sciencefiction"}, 
    {"firstName": "Tad","lastName": "Williams","genre": "fantasy"}, 
    {"firstName": "Frank","lastName": "Peretti","genre": "christianfiction"}
    ]
    };

    var array = json.people;//從json物件中獲取people屬性,返回的是一個陣列
    var json_json = array[0];//返回的是people陣列的第一個json物件
    var value = json_json.firstName //返回值Brett

修改JSON

javascript能夠通過直接賦值修改資料

例如:

    json.people[0].firstName = "Jim" 

前後端通訊

上文講述了JSON是什麼鬼,下面簡單講一下是前後端是如何通訊的。

前端向後端傳送資訊一般用GET或POST來進行通訊,一般GET用於請求指定資源,其內容會憑藉在URL後面,以?分割,各請求間用&連線

例如:

    www.abc.com?id=1&page=1

而POST請求即不會出現在URL背後,其能夠在HTTP的請求報文體內找到,有需要的童孩自己抓一下包就可以檢視到POST的資料

如果你是用PHP,你可以用超全域性變數$_GET[],$_POST[]獲得使用者的引數,如果你是寫的CGI程式,則需要先獲取這段引數,然後進行URL解碼,再分割這些資料,按鍵和值構建你的語言所支援的資料結構。

一般而言,多是瀏覽器用以上兩種方式向服務端傳送資料,而服務端則收到瀏覽器的申請後,向瀏覽器返回JSON格式的資料,瀏覽器端只需要解釋掉這段JSON後就能用js進行下一步操作了。

當然了,前後端的通訊還有其他東西學習,我這裡只是略微提及一下,自己也還需要進一步修煉。

更多的答案在我前一段時間提的問題 關於前後端JSON具體是如何通訊的?