为什么都反对 XML 而支持使用 JSON

Original 2016-10-31 16:55:24 478
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 也好, 都有各自发挥的地方.


Release Notes

Popular Entries