一个使用场景是我觉得 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 也好, 都有各自发挥的地方.