谷歌协议缓冲区与JSON与XML的比较

236

我想了解以下技术的优缺点:

  • Google Protocol Buffers
  • JSON
  • XML

我希望为两个应用程序实现一个通用框架,一个是Perl,另一个是Java。因此,我想创建一个可以被两种技术(Perl和Java)使用的通用服务。

这两个应用程序都是Web应用程序。

请分享您宝贵的想法和建议。我在谷歌上看到了许多链接,但意见不一。


10
你认为这里很可能会达成共识吗? - Barmar
JSON与XML比较:https://dev59.com/Z2445IYBdhLWcg3wcJ2O - rai.skumar
1
非常感谢。但我想了解更多关于 Protocol Buffers 和 JSON 的区别。 - Manoj Kathiriya
24
@Barmar 不是关于共识的问题,而是关于理性选择、利弊权衡的问题,很好的是在元警察开始降低SO内容质量之前就已经提出了这个问题。 - Boris Treukhov
1
迈克尔 - 这就是点赞的作用。帖子中信息的质量取决于所写答案的准确性,而不在于该答案是否出现在StackOverflow上。 - Dan Nissenbaum
显示剩余3条评论
1个回答

294

Json

  • 易于人类阅读和编辑
  • 可以在不事先了解模式的情况下进行解析
  • 在浏览器上有很好的支持
  • 比XML更简洁

XML

  • 易于人类阅读和编辑
  • 可以在不事先了解模式的情况下进行解析
  • 标准用于SOAP等
  • 具有良好的工具支持(xsd,xslt,sax,dom等)
  • 相当冗长

Protobuf

  • 非常紧密的数据(输出较小)
  • 需要知道模式才能稳健地解码(数据格式内部存在歧义,需要模式进行澄清)
  • 处理速度非常快
  • 不适合人眼查看(密集二进制)

这些都在大多数平台上得到了很好的支持。

就我个人而言,我现在很少使用XML。 如果消费者是浏览器或公共API,则倾向于使用json。 对于内部API,我倾向于使用protobuf来提高性能。 在公共API上同时提供两种方式(通过标头或单独的端点)也很有效。


11
XML的解码工作量更大,但验证与JSON相比具有重大优势。在处理包含支付交易的XML之前使用模式验证可以为您提供额外的强壮性保障层。 - CC.
14
XML还允许一种叙述风格,其中文本交替出现标记包含,例如<value>This is a <attention>narrative style</attention>. Tags could appear <exclamation /> in the middle of text</value>。与JSON和Protocol Buffers相比,这是XML的独特功能。 - Paul
3
@Marc Gravell:就向前兼容性而言,你怎么看?我的印象是这是 protobuf 的一个重要优势之一? - Thomas Ahle
1
据我了解,这在概念上几乎是不可能的,因为对于Protobuffs来说,几乎没有什么需要解析的内容,而使用JSON则必须经过漫长而不可避免的处理阶段。 - Jules G.M.
6
提一下,你也可以在JSON中使用模式。 - Jesus Angulo
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接