代码之家  ›  专栏  ›  技术社区  ›  13ren

JSON会将XML替换为数据格式吗?[关闭]

  •  16
  • 13ren  · 技术社区  · 16 年前

    当我第一次看到XML时,我认为它基本上是树的表示。然后我想:重要的不是它是一个特别的 好的 代表树木,但这是每个人都同意的。就像ASCII一样。一旦建立起来,就很难被网络效应所取代。新的替代方案必须更好(可能是10倍更好)才能取代它。当然,为了国际化,ASCII已经(大部分)被Unicode所取代。

    根据 google trends ,xml领先于x43,但正在下降-而json却在增长。

    [ 编辑 ]JSON会将XML替换为数据格式吗?

    1. 哪些任务?
    2. 哪些程序员/行业?

    笔记: s-expressions(来自lisp)是树的另一种表示形式,但尚未得到主流的采用。还有许多其他的方案,例如yaml和协议缓冲区(用于二进制格式)。

    我可以看到JSON控制着与客户端Ajax(ajaj?)的通信空间。这可能会以传递的方式重新传播到其他系统中。

    基于SGML的XML作为一种 文档格式 . 我对XML作为 数据格式 .

    XML有一个JSON所缺少的已建立的生态系统,特别是定义格式(XML模式)和转换格式(XSLT)的方法。XML还有许多其他标准,特别是Web服务——但它们的重量和复杂性可以与XML相提并论,并使人们想要一个新的开始(类似于“Web服务”从CORBA的新开始)。

    [ 2010年版 ]和NoSQL一样,JSON也是 图式 .

    4 回复  |  直到 16 年前
        1
  •  7
  •   Beep beep    16 年前

    我认为JSON已经在很大程度上取代了XML与Web服务器进行客户端通信,但这很可能是它的优势所在。如您所述,XML提供了适合服务器到服务器交互的优势。

        2
  •  14
  •   StaxMan    15 年前

    简短回答:是和否(根据以下评论编辑)

    存在根本性的差异和权衡。XML是一种 标记 语言,特别适用于文本文档(XHTML、DocBook、各种Office文档)。 对许多其他任务来说都足够好。问题主要是因为它具有层次结构模型(而不是SQL中的关系模型,或OO语言中的对象图模型)。

    JSON是一个 对象标记 这意味着它更适合处理面向数据的用例;在XML类型起作用的情况下,但是在克服对象模型和层次模型之间的阻抗方面有更多的成本。 JSON不是一个完美的工具——它仍然是数据,而不是对象(没有标识,不能做完整的图形)——但它比XML更自然。 因此,可以更容易地构建工具来进行良好、体面和简单的数据绑定。

    所以:两者都有足够的空间,我希望两者都能长期使用。 并非总是以最佳的方式,但这两者都可以很好地完成大量用例。

    值得一提的是,自从写下我最初的答案以来,我已经看到JSON绝对地消灭了我为之工作过的公司的面向数据/数据交换用例的XML。SOAP(ETC)将开始显著萎缩,“普通的JSON”数据交换(特别是以RESIC框架,例如JAX-RS为Java)将接管。

    然而,XML对于文本标记更好。

        3
  •  8
  •   Yauhen Yakimovich    11 年前

    我大胆的论点是这样的替代 不可能的 毕竟,由于这些数据格式(JSON和XML)是 不同的 .

    短版本:XML不是等效的 到JSON(或类似的)格式,因为XML 节点(标记)支持属性 符号和名称间距。结果证明 至关重要。

    因此,回答这个问题的最佳方法实际上是展示这些格式是如何不同的,即完成比较。请原谅我所说的明显的,但我只希望这将是有趣的,甚至是有用的。如果我们首先同意简单的术语,它将有助于:

    1. 数据格式 实际上是一种形式语言,它控制如何识别数据(在其表示中,即如何根据存储方式从内存中“读/写”数据)。
    2. 数据结构 是一种抽象的建模方法(描述)如何组织或链接这些数据。

    因此,实际上这两个概念都涉及数据维护的不同方面(例如IO)。例如,特定数据类型的索引数组是( 均质 )结构和它可以作为一个序列访问(读/写)( 邻接的 格式)。

    wikipedia有一篇关于json的伟大文章,其中包含许多替代方案,比如(已经命名为lisp的)s-expressions、python嵌套结构、php数组、yaml等(注意,我们不考虑像.ini文件这样的字典,因为它们缺少多个嵌套)。所有这些格式都可以看作是某种数据结构的表示——树。我们可以说它们在这个意义上是同构的。每个表示都可以映射到树上,这样就不需要进行额外的处理(例如,形式语言的语法不会更改)。还有一个反向映射。

    你可能会说这是“某种”理论,但它对实践意味着什么?其含义是,如果我们通过以下方式比较XML和JSON:

    • 设计目的和动机
    • 应用程序域-格式用于解决的任务集
    • 语法复杂性(好吧,简单性——扩展格式更可读/可写/人性化/etc)
    • 成熟度(比如格式有多少个版本)
    • 等等

    我们将发现更多的实际差异。主要是XML是 标记 语言(如前所述)。是的,要进行折叠,它能够混合名称空间和属性,从而产生更高的“并行”嵌套顺序。

    在过去的两年里,我一直在忙着将XML表示形式来回转换为Python嵌套结构。我唯一的苦涩结论是,它们完全是相容的。要表示属性和名称间距,应在树表示中转义(例如,带前缀)此信息。因此,再次强调,XML绝对不是一棵树;-)由于具有“标记”功能,因此,它可以立即(无需编码、封装或转义)表示比树复杂得多的结构,即。 类型树 . 具有特殊顶点类型的树(同样通过名称空间和属性)。

    还有其他的困难和危险,比如解析和映射

    <body>The <strong>marked up</strong> text</body>
    

    变成一棵树,没有预先决定的约定(如何打破..文本“?”或者保留XML中遵循的顺序。

    显然,不等价的事物很难互相替代。从这个意义上讲,XML比嵌套结构更复杂。

    有关行业的部分问题似乎得到了很好的回答,即XML将保持服务器端和面向文档的技术。主要是因为它具有优越的数据输入能力。此外,也有很多研究仅仅以XML作为标记语言来进行。

    请原谅我离主题太远,讨论了JSON的流行程度,但它似乎部分相关;)

    我想强调一下JSON 对象标记 )完全无法通过设计(它是javascript)掌握任何自定义类型信息(它枚举类型而不提供“运行时”引用或上下文),因此无法传递高度耦合的对象化数据。类型信息将始终抽象为JSON本机类型。这限制了面向类型开发(类型检查、约束、强制转换、委托等)的能力。但是,imho这个非常关键的问题被大多数现代编程语言(我知道)与JSON共享,它们缺少像XML那样复杂的嵌套定制数据类型(对象或函数不是文档)。似乎XML本身只是在无意中做的,而不是在设计中。

    因此,在使用JSON时,我们采用了与使用流行的动态语言处理“duck”类型数据类似的策略。因此,这是JSON的另一个特性——允许快速编码,但在变得太大(嵌套和复杂)时,可能会出现体积过大的风险。

    JSON比XML更像是一把瑞士刀,因为它更简单 .

    因此,JSON不利于与Java之类的强类型语言互操作,但另一方面,它允许通过鼓励抽象分解来降低耦合。由于有时丢失类型信息可能是一件好事(折减系数),因此它允许更简单的架构。ActionScript更喜欢在JSON中进行实际的通信(但他们也提出了自己的AMF)。最后,JSON与KISS(如RESTful)设计的结合非常好。JSON的购买速度快且简单。但人们通常会忽略的是,当kiss不可能实现,领域逻辑过于复杂时——设计DTD和XSD,思考格式等等——应该由某人来完成(通常在稍后,当cool kiss方法由于缺乏设计能力和经验而失败时)。重点是 JSON是一个很好的工具,它缺乏应用程序的规模 .

        4
  •  3
  •   ivan_ivanovich_ivanoff    16 年前

    替换XML?哪个XML?

    “XML-数据结构的类型” “xml-此结构的文本表示形式” .

    因此,尽管XML的文本表示可以用多种方式替换 (json,yaml,…)不会取代结构特性。 (有一棵树、具有属性的元素、子元素和文本节点)。

    存在存储和/或处理XML结构化数据的格式,而 忽略了文本形式。实例:

    1. DOM -以转换效率的形式将对象树存储在内存中。
    2. EXI -以二进制优化形式存储/传输XML数据的未来格式。

    因此,XML的文本表示可以通过转换来“替换” 将标准的XML符号转换为其他符号,然后再返回。 (XML到JSON,返回XML)

    但是,结构特性和基于它们的所有技术, 不能“替换”,因为这只会 打破所有标准 . 所以没人这么做。只有其他的文本表示 被读取到内存中的DOM或其他格式,实现更高级别的抽象 因此忽略了潜在的文本形式。