最近工作在解析客戶的 Web Service(WS) 所傳遞的資料,當我得取一串對方提供的 URL 去得取 WS 當中的資料但是以 XML 來呈現,不過我需要解析成為 JSON 格式對於觀看直覺更方便!但在解析之前讓我們先來認識 JSON 吧!!
What?
讓我們先來看看維基大哥怎麼說:
JSON(JavaScript 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年註冊http://json.org,並為各種語言編寫了解析與構造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為參數的name,value則為數值,中間每個參數可用”逗號,”做區隔。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格式。





留言
張貼留言