abstract:我覺得已經(jīng)有非常多的例子說明 JSON 比 XML 具有優(yōu)勢的地方. 我來說一個使用場景是我覺得 XML 比 JSON 有優(yōu)勢的情況 --- UI 數(shù)據(jù)的描述. 我們都知道 JSON 和 XML 設(shè)計的初衷里都包含一點是對人類友好, 所以兩者在這方面屬于競爭關(guān)系. 而在 UI 描述上, 我覺得 XML 是比 JSON 要優(yōu)異很多. 我們先來看一組簡單的數(shù)據(jù)排版:<ui:group
我覺得已經(jīng)有非常多的例子說明 JSON 比 XML 具有優(yōu)勢的地方. 我來說一個使用場景是我覺得 XML 比 JSON 有優(yōu)勢的情況 --- UI 數(shù)據(jù)的描述.
我們都知道 JSON 和 XML 設(shè)計的初衷里都包含一點是對人類友好, 所以兩者在這方面屬于競爭關(guān)系. 而在 UI 描述上, 我覺得 XML 是比 JSON 要優(yōu)異很多. 我們先來看一組簡單的數(shù)據(jù)排版:
<ui:group layout="vertial"> <ui:block width="200" layout="horizontal"> <ui:input value="Search"></ui:input> <ui:button>Search</ui:button> </ui:block> <ui:block width="400"></ui:block></ui:group>
倘若由 JSON 描述, 將會變成:
{ "type": "ui:group", "layout": "vertical", "children": [ { "type": "ui:block", "width": 200, "layout": "horizontal", "children": [ { "type": "ui:input", "value": "search" }, { "type": "ui:button", "label": "Search" }, ] }, { "type": "ui:block", "width": 400, }, ],}
可以看出來, XML 的數(shù)據(jù)會比 JSON 更符合人類對 UI 布局的描述, JSON 在這個場景中會更加偏向?qū)C(jī)器友好.
然而情況還不僅僅是這樣, 我們回過頭來看看上面數(shù)據(jù)中的 ui:button 定義. XML 中的定義, 我采用了 `<ui:button>Label</ui:button>` 的形式, 而在 JSON 中, 我刻意的使用了一個 `label` 字段來簡化 button 數(shù)據(jù)在 JSON 中的復(fù)雜度. 但是這樣做減弱了 ui:button 內(nèi)部嵌套元素的可能性. 倘若我們需要的是一個 icon button, 在 XML 中, 我們可以這么書寫:
<ui:button> <icon src="foobar.png"></icon> OK</ui:button>
而在 JSON 中, 嵌套結(jié)構(gòu)將會帶來無盡的 Array + Object 的組合, 對人類閱讀并不十分友好.
所以, 并不是所有情況都要反對 XML 而去使用 JSON, 我覺得只有在數(shù)據(jù)需要和代碼實例做映射時, JSON 相對 XML 的優(yōu)勢才能體現(xiàn). 而其他一些使用場景, XML 也好, JSON 也好, 都有各自發(fā)揮的地方.