为什么unmarshalling json比xml更容易

时间:2012-06-15 18:27:52

标签: xml json marshalling

它只是内置工具吗?从根本上说,格式不会自动编组xml。

xml和json之间唯一的区别是[tag] HI World [/ tag]到{tag:HI World} ..所以JSON obj是一半大小

正确?

3 个答案:

答案 0 :(得分:1)

这不一定容易。完整的JSON解析器实现可能与XML文档的实现一样复杂。 当然,由于显而易见的原因,JSON字符串的大小几乎总是小于它的XML等价物。

但是,在XML中将JSON作为数据传输格式进行选择取决于底层技术(JavaScript到JavaScript或服务器,或者相反)。 在其他情况下,例如,当您的数据已经作为XML存在时,将它转换为JSON的效率并不高,因此您可以将其发送到某个地方(到REST服务或其他任何地方)。

因此,这是一个简单的选择:选择您正在使用的技术所支持的最佳选择。 JSON,用于处理来自JavaScript和XML的SOAP Web服务,或者当您的数据已经是XML时。

答案 1 :(得分:1)

JSON的根源在于Javascript,这是一种带有松散输入的动态语言。每个数据项都是“松散类型”,这意味着运行时系统并不关心事物是字符串,数组,整数,对象还是函数。变量持有“某些东西”,当你尝试用它们做某事时,确定类型。

因此,反序列化JSON数据包非常简单。要反序列化的表示形式是字符串或数字。

另一方面,使用XML,XML Schema标准列出了许多特定的数据类型,包括整数,浮点数,字符串等基本内容,还包括dateTime,date,然后是更复杂的派生类型,如有序序列那些东西,那些东西的阵列,以及“工会”。当定义这些XML内容时,在保证xml文档是一个良好的形式,并且b。)根据这些相当具体的模式定义之一有效时,需要付出很多努力。大多数xml序列化程序使用部分打字魔术。

在XML模式中,您还可以指定引用,以便XML文档中的一个项可以引用另一个项。

作为一个例子,现在当我使用stackexchange API查询特定用户发布的“问题答案”列表时,我找回了一个项目列表,每个项目包含同一用户的重复块。它们看起来都像这样(伪代码):

{ answers: [ 
  { answer_id: 98393398398
    question_id 28282828
    owner: {
     name: Cheeso
     user_id 48082
     reputation: 3093
     date_created: 110101010}
   },
  { answer_id: 28783398398
    question_id 111128828
    owner: {
     name: Cheeso
     user_id 48082
     reputation: 3093
     date_created: 110101010}
   },
   ...
] } 

但XML允许我引用文档中的其他位置,所以我会得到类似这样的内容(再次,伪代码):

{ users: [ ["#user1", "Cheeso", "48082", 3093 ]] ,
  answers: [ 
   { answer_id: 98393398398
    question_id 28282828
    owner: #user1 },
  { answer_id: 28783398398
    question_id 111128828
    owner: #user1},
   ...
] } 

当然,您可以构建您的json应用程序以理解和使用“文档内引用”。但问题是,使用XML,这已经是模型的一部分。

所有这些意味着,在实践中,序列化和反序列化XML可能比使用JSON执行相同操作更具参与性。

我认为人们发现更宽松的json方法更为可取,因为它更灵活,适应性更强,更易于使用。另一方面,一些文档足够大,XML模式的刚性和形式非常有价值,json太松散了。我正在考虑一个OOXML文档。

答案 2 :(得分:1)

JSON提供了Javascript中使用的数据结构的序列化,这与许多编程语言中的数据结构非常相似。 XML是为文档标记而设计的。因此,JSON旨在匹配编程语言所擅长的,XML旨在满足文档创作的需要。

  

人们发现更宽松的json方法更受欢迎,因为它更灵活

恰恰相反。人们发现JSON更受欢迎,因为它不太灵活;它只能用Javascript等语言轻松处理。