abstract:我觉得已经有非常多的例子说明 JSON 比 XML 具有优势的地方. 我来说一个使用场景是我觉得 XML 比 JSON 有优势的情况 --- UI 数据的描述. 我们都知道 JSON 和 XML 设计的初衷里都包含一点是对人类友好, 所以两者在这方面属于竞争关系. 而在 UI 描述上, 我觉得 XML 是比 JSON 要优异很多. 我们先来看一组简单的数据排版:<ui:group
我觉得已经有非常多的例子说明 JSON 比 XML 具有优势的地方. 我来说一个使用场景是我觉得 XML 比 JSON 有优势的情况 --- UI 数据的描述.
我们都知道 JSON 和 XML 设计的初衷里都包含一点是对人类友好, 所以两者在这方面属于竞争关系. 而在 UI 描述上, 我觉得 XML 是比 JSON 要优异很多. 我们先来看一组简单的数据排版:
<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 的数据会比 JSON 更符合人类对 UI 布局的描述, JSON 在这个场景中会更加偏向对机器友好.
然而情况还不仅仅是这样, 我们回过头来看看上面数据中的 ui:button 定义. XML 中的定义, 我采用了 `<ui:button>Label</ui:button>` 的形式, 而在 JSON 中, 我刻意的使用了一个 `label` 字段来简化 button 数据在 JSON 中的复杂度. 但是这样做减弱了 ui:button 内部嵌套元素的可能性. 倘若我们需要的是一个 icon button, 在 XML 中, 我们可以这么书写:
<ui:button> <icon src="foobar.png"></icon> OK</ui:button>
而在 JSON 中, 嵌套结构将会带来无尽的 Array + Object 的组合, 对人类阅读并不十分友好.
所以, 并不是所有情况都要反对 XML 而去使用 JSON, 我觉得只有在数据需要和代码实例做映射时, JSON 相对 XML 的优势才能体现. 而其他一些使用场景, XML 也好, JSON 也好, 都有各自发挥的地方.