【问题标题】:Json parsing vs xml parsing? [closed]Json解析与xml解析? [关闭]
【发布时间】:2012-08-22 06:58:05
【问题描述】:

json解析的优缺点是什么? 为什么开发者更喜欢使用 json 而不是 xml 解析?

【问题讨论】:

标签: xml json


【解决方案1】:

Json...

与 XML 相比,开销更小 - XML 的结束标记将样板代码大小增加了大约 2 倍。它也更易于阅读 - 考虑一下

{
  "key": "value",
  "other key": 3.1415926535897932,
  "arr": [
    1,
    2,
    3
  ]
}

<?xml version="1.0"?>
<!-- not to mention the DTD declaration -->
<myXmlFormat>
  <key>value</key>
  <otherKey>3.1415926535897932</otherKey>
  <arr>
    <number>1</number>
    <number>2</number>
    <number>3</number>
  </arr>
</myXmlFormat>

解析更容易和更快(因为它更轻量级) - 有很多 JSON 解析器,它们本身比使用相同编程语言的 XML 解析器更小更快(考虑 libxml2 与 js0n)。

JSON 的数据类型还与传统上被认为是“原始”的数据类型进行 1:1 映射 - 例如字符串、整数和实数、数组和键值表。此外,这些原始数据类型很容易与 Foundation 一起使用,它们内置于其中 - 上面的 JSON 可以轻松解析为包含“key”、“other key”和“arr”作为键的 NSDictionary,它们对应于字符串“值”,pi 分别作为 NSNumber 和 NSArray。同时,还必须考虑 XML - 也许您甚至必须创建自定义类来表示 XML 中描述的您自己的数据结构。

专门针对 iOS 平台:Cocoa 的原生 XML 解析器,NSXMLParser 使用起来不仅违反直觉。 iOS 上的 Foundation 框架不包括 Mac OS X 上 Foundation 的 NSXMLNode 类,这迫使开发人员编写自己的意大利面条代码来将所有 XML 包装到一些结构化数据中……嗯……结构而不是能够使用包含的。

【讨论】:

  • 我觉得xml更容易理解。
  • JSON 不直接映射到 XML,这肯定更复杂 - 但不仅仅是“样板”,它也更灵活,更适合其他事物(例如 UI)。您可以使用 表示相同的内容(数组除外)。 JSON 和 XML 都有各自的用途。
【解决方案2】:

XML

优势

  • XML 最重要的优点是它是其他人最容易阅读的格式。

  • 第二个优势是 XML 已经存在了很长一段时间,并且许多开发人员已经习惯了它。

缺点

  • 将数据插入 HTML 页面所需的 JavaScript 非常冗长。

JSON

优势

  • 如果您将 JSON 文件作为新标签导入,那么 JSON 最重要的优势是绕过了 JavaScript 的同源策略。有关血腥细节,请参见 Simon Willison 的示例。 JavaScript 不允许您访问来自其他服务器的文档(无论是 XML 还是 HTML)。但是,如果您将 JSON 文件作为脚本标签导入,则可以规避此问题,并且可以将任何 JSON 数据导入任何网站。这是好事还是坏事取决于您的业务目标,但目前它是唯一允许无限制访问的数据格式。

  • 第二个优势是 JSON 数据的脚本比 XML 数据的脚本更简单,更符合 JavaScript 语言的其余部分。

缺点

  • JSON 最重要的缺点是该格式对于人类来说很难阅读,当然,每个逗号、引号和括号都应该在正确的位置。虽然 XML 也是如此,但 JSON 的大量看起来很复杂的语法,例如数据 sn-p 末尾的 }}]},可能会吓到新手并导致复杂的调试。

从 cmets 来看,JSON 被认为比 XML 处理得更快。

【讨论】:

  • 完全不能同意pro XML args!
  • 将 json 作为 javascript 源导入是一个巨大的安全漏洞,它与通过 eval 函数解析 json 不相上下。它有效,但不是一个好主意。
  • XML的优点和JSON的缺点完全相反,甚至JSON的优点也是错误的,因为它没有规避CORS
  • 您的意思是:“[XML] 是其他生物比人类最容易阅读的格式。” ;)
猜你喜欢
  • 2013-10-21
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
  • 2010-11-05
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 2012-02-28
相关资源
最近更新 更多