關於JSON資料格式與語言的關係


今天有人提到:「JSON 資料格式與語言無關」,這樣斷章取義真的會誤導部分不求甚解的人。應該完整的引用整句話上下文:「JSON 資料格式與語言無關,脫胎自JavaScript」,想像一下子女與父母的血緣關係,沒有人會說兩者就像路人一樣無關的。

我覺得維基百科上「JSON 資料格式與語言無關」這段文字的適當性其實有很大的商榷空間。

維基百科的內容不是真理,畢竟它的大部分內容是開放的。它的文案校對水平跟出版業比起來不是一個級別,網頁文字修改並不像印刷品需要逐本去貼貼紙,因此沒有一套嚴謹的出版SOP。

『只知學習,卻不去思考所學的道理,那還是等於一無所知;而單憑空想,卻不去實地學習,也是得不到正確的學問。』

嚴格地說,JSON 是 Javascript 的非函式物件拓墣型態,它在拓墣後必然失去生命力,因為無法存在非執行環境(網路)的邏輯資料(API語法)已經被移除。然而,該拓墣若回到原生執行環境則100%相容,因此JSON非常適合用於瀏覽器跨平台資料交換。

JSON是唯一一種程式語法的片段本身,既可當成網路資料傳輸文件,同時是不須經過修改即可直接被直譯的程式語言和網路資料交換標準。講白話就是,你可以把Javascript的特定程式碼(子集)直接傳給任何其他語言開發的系統,都能被接受,更不用說這語言子集已經是IT產業EDI標準。

任何程式語言都能透過對JSON文檔或字串的解析來轉換為語言自己的資料型別,但不能用JS語法來宣告定義資料型別和初始值。反觀Javascript可以一字不改的使用JSON來宣告定義。

請問有哪位程式人員會在JS寫:「var o = JSON.parse("[1,2,3]");」而不寫「var o = [1,2,3];」的?

事實上,不管JSON的格式如何進化,都會先在Javascript的現行版本包含這些規格,因為這是規定(都說是子集了),這是JSON的宿命,當初若沒有Javascript打下Ajax的一片天,JSON就沒有取代XML的優勢可言,未來不會有JSON跟JS有分道揚鑣的一天,因為唇亡則齒寒。

上面立論非常重要,也是我認為「JSON 資料格式與語言無關」這句話有誤導概念之嫌的原因。

維基百科是這樣寫JSON的:
「JSON(JavaScript Object Notation,JavaScript物件表示法,讀作/ˈdʒeɪsən/)是一種由道格拉斯·克羅克福特構想和設計、輕量級的資料交換語言,該語言以易於讓人閱讀的文字為基礎,用來傳輸由屬性值或者序列性的值組成的資料物件。儘管JSON是JavaScript的一個子集,但JSON是獨立於語言的文字格式,並且採用了類似於C語言家族的一些習慣。
JSON 資料格式與語言無關,脫胎自JavaScript,但目前很多程式語言都支援 JSON 格式資料的生成和解析。JSON 的官方 MIME 類型是 application/json,副檔名是 .json。」

看完我的說法之後再讀一次維基百科是不是想法更完整了呢?!

留言

這個網誌中的熱門文章

揭開 C#.NET 官方原始碼 System.Func、System.Action、System.Delegate 及 delegate 關鍵字背後的技術面紗

從Lambda語法來探討.NET LINQ的技術底蘊到底在哪裡?

C# 物件屬性的建構賦值與初始化 - C# constructor and object initializer