What is JSON?



最近工作在解析客戶的 Web Service(WS) 所傳遞的資料,當我得取一串對方提供的 URL 去得取 WS 當中的資料但是以 XML 來呈現,不過我需要解析成為 JSON 格式對於觀看直覺更方便!但在解析之前讓我們先來認識 JSON 吧!!

What?

讓我們先來看看維基大哥怎麼說:
JSONJavaScript Object Notation)是一種由 Douglas Crockford (道格拉斯·克羅克福特構想和設計、輕量級的資料交換語言,該語言以易於讓人閱讀的文字為基礎,用來傳輸由屬性值或者序列性的值組成的資料物件。儘管JSON是JavaScript的一個子集,但JSON是獨立於語言的文字格式,並且採用了類似於C語言家族的一些習慣。JSON 資料格式與語言無關,脫胎於 JavaScript,但目前很多程式語言都支援 JSON 格式資料的生成和解析。JSON 的官方 MIME 類型 application/json,副檔名是 .json

整理以下幾個重點去研究探討,才能得知這項技術的本質:

1.輕量級資料交換語言
2.跟 JavaScript(JS) 有啥關係?
3.資料不僅僅是一筆有可能是好幾筆,該用什麼方式儲存?

1.輕量級資料交換語言

現今App資料傳輸的輕量化以及物件導向程式設計的架構,主流的程式語言可透過JSON序列化和反序列化的方式將JSON轉換為物件。以文字為基礎,且易於讓人閱讀。


2.跟 JS 有啥關係?

JSON (JavaScript Object Notation),由Douglas Crockford在2002年發現並制定了標準。從名稱上就可以發現 JSON 是基於 JS 的,是 JS 的一個子集。JSON是用 JS 語法來表示數據的一種輕量級語言。

Douglas在2002年註冊,並為各種語言編寫了解析與構造JSON數據,但起初 JSON 一直沒有得到足夠的重視,情況一直延續到ajax的出現。(後續在分享)

從ajax的命名可以發現,數據交換是以 XML 格式為主。
在ajax剛出現的時候,多數應用都是採用XML格式。但是XML格式有一個缺點,就是文檔構造複雜(天書) 需要傳輸較多的字數。在這種情況下,JSON的輕便性逐漸得到重視,後來替代XML成為ajax最主要的數據傳輸格式。可以舉個簡單的例子感受一下二者的區別:

<?xml version="1.0" encoding="utf-8"?>
<product>
<additional_image_link>http://www.tailspintoys.com/images?id=123def</additional_image_link>
<additional_image_link>http://www.tailspintoys.com/images?id=567def</additional_image_link>
<adult>False</adult>

<tax>
<country>US</country>
<rate>9.9</rate>
<region>CA</region>
<ship>True</ship>
</tax>
<title>Cute Toddler Sundress</title>
</product>





{
  "article" : [
    {
      "title": "Article Title1",
      "content": "content1"
    },
    {
      "title": "Article Title2",
      "content": "content2"
    }
  ]
}

3.資料不僅僅是一筆有可能是好幾筆,該用什麼方式儲存?

JSON主要的格式是以 name 以及 value 所組成的,JSON 的官方 MIME 類型是 application/json,主要分成兩個主要的結構:

物件(object) 用大括號 { } 
陣列(array) 用中括號 [ ] 

物件(object) 結構



JSON Object是由兩個大括號所包住的,string為參數的namevalue則為數值,中間每個參數可用逗號,做區隔。Value可放的內容可參閱下圖,包含string, number, json object, array, boolean, null





這裡需要注意,JSON沒有區分int, double, float, Decimal等數值型態。 


陣列(array)結構


array則是由中括號所組成,array內的物件皆不需要有額外的命名,由於array是屬於value的一種,因此array外層應當給予命名,例如arrayName:[value1, value2, value3],而array內的value就如同剛剛上述所描述的value,因此array內可以放string, number, json object, array皆是可以的,這樣的設計皆與物件導向的物件結構設計息息相關。


實用的Json工具

JSON String 解析網站  https://jsoneditoronline.org/
該網站可將JSON文字貼於左方框格,按下向右箭頭後可將JSON參數整理顯示, 若格式有錯也會提示錯誤發生的地方,右方也可以修改JSON內容後按向左箭頭轉回成JSON格式。







留言