|
快乐人L
发表于 2021-1-7 13:36:14
|
显示全部楼层
我觉得答案中已经有非常多的例子说明 JSON 比 XML 具有优势的地方. 我来说一个使用场景是我觉得 XML 比 JSON 有优势的情况 --- UI 数据的描述.
我们都知道 JSON 和 XML 设计的初衷里都包含一点是对人类友好, 所以两者在这方面属于竞争关系. 而在 UI 描述上, 我觉得 XML 是比 JSON 要优异很多. 我们先来看一组简单的数据排版:
<ui:group layout=&#34;vertial&#34;>
<ui:block width=&#34;200&#34; layout=&#34;horizontal&#34;>
<ui:input value=&#34;Search&#34;></ui:input>
<ui:button>Search</ui:button>
</ui:block>
<ui:block width=&#34;400&#34;></ui:block>
</ui:group>
倘若由 JSON 描述, 将会变成:
{
&#34;type&#34;: &#34;ui:group&#34;,
&#34;layout&#34;: &#34;vertical&#34;,
&#34;children&#34;: [
{
&#34;type&#34;: &#34;ui:block&#34;,
&#34;width&#34;: 200,
&#34;layout&#34;: &#34;horizontal&#34;,
&#34;children&#34;: [
{ &#34;type&#34;: &#34;ui:input&#34;, &#34;value&#34;: &#34;search&#34; },
{ &#34;type&#34;: &#34;ui:button&#34;, &#34;label&#34;: &#34;Search&#34; },
]
},
{
&#34;type&#34;: &#34;ui:block&#34;,
&#34;width&#34;: 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=&#34;foobar.png&#34;></icon>
OK
</ui:button>
而在 JSON 中, 嵌套结构将会带来无尽的 Array + Object 的组合, 对人类阅读并不十分友好.
所以, 并不是所有情况都要反对 XML 而去使用 JSON, 我觉得只有在数据需要和代码实例做映射时, JSON 相对 XML 的优势才能体现. 而其他一些使用场景, XML 也好, JSON 也好, 都有各自发挥的地方. |
|