【问题标题】:ASN.1 vs JSON when is is appropriate to use them?ASN.1 vs JSON 什么时候适合使用它们?
【发布时间】:2012-06-29 13:36:50
【问题描述】:

什么时候使用 ASN.1 比使用 JSON 更可取?这两种方法的优缺点是什么?

【问题讨论】:

    标签: json language-agnostic encoding asn.1


    【解决方案1】:

    ASN.1 和 JSON 没有严格的可比性。 JSON 是一种数据格式。 ASN.1 是一种模式语言加上多组编码规则,每组编码规则都会为给定的模式生成不同的数据格式。所以,最初的问题有点类似于“XML Schema vs. XML:什么时候适合使用它们?”这个问题。更公平的比较是 ASN.1 和 JSON Schema。

    也就是说,有几点需要考虑:

    • ASN.1 具有二进制编码规则。考虑二进制编码还是文本编码更适合您的应用程序。
    • ASN.1 也有 XML 和 JSON 编码规则。如果愿意,您可以选择使用 ASN.1 进行基于文本的编码。
    • ASN.1 允许开发其他编码规则。在 ITU-T 为 JSON 指定编码规则之前,我们指定了我们自己的规则来将 ASN.1 编码为 JSON。我在我们公司的网站here
    • 与 XML Schema 一样,存在用于编译 ASN.1 的工具。这些通常被称为数据绑定工具。编译器输出包含保存数据的数据结构,以及用于对各种编码(二进制、XML、JSON)进行编码/解码的代码。
    • 我不确定是否存在用于 JSON 模式的数据绑定工具(如果有的话)。我也不确定 JSON Schema 有多成熟/稳定,而 ASN.1 相当成熟和稳定。
    • 在 JSON Schema 和 ASN.1 之间进行选择,请注意 JSON Schema 绑定到 JSON,而 ASN.1 未绑定到任何特定表示。

    【讨论】:

    • 我在 JSON 工具/库中看到的一件事是,在某些语言中它们放弃了。我认为您可以在 JSON 模式中表达联合,但我听说 C# 工具放弃了这一点,因为 C# 没有联合。而我在 C# 中使用的所有 ASN.1 工具的类都做得很好(哪些选择)。我认为 GPB(有 oneof)在 C# 中也可以。
    【解决方案2】:

    无论您是否需要使用 C、C++、C#、Java 或任何其他具有 ASN.1 编码器/解码器引擎的编程语言来序列化可能发送给收件人的消息,您都可以使用 ASN.1。 ASN.1 还提供了多种编码规则,它们在不同的情况下都有好处。例如,在规范编码至关重要时使用 DER,例如在数字证书中,而在带宽至关重要时使用 PER,例如在蜂窝协议中,而当您不关心带宽并且想要以 XML 格式显示编码以便在浏览器中进行操作或与 XML Schema 引擎交换消息。

    请注意,使用好的 ASN.1 工具,您无需更改应用程序代码即可在这些 ASN.1 编码规则之间切换。一个简单的函数调用就可以选择你想使用的编码规则。

    【讨论】:

    • Java 与 JSON 有什么关系?
    • 我的理解是 JSON 是指 JavaScript Object Notation。你是在告诉我这与 Java 无关,尽管 Java 是其名称的一部分?
    • 好的。我对 JSON 文本格式了解不多,但我对 ASN.1 非常了解,它可以根据您的需要灵活地生成非常紧凑的二进制编码 (PER) 或详细的 XML 编码。跨度>
    • 我编辑了答案以删除不与 Java 绑定的部分。
    【解决方案3】:

    Here 可以找到一个对 JSON、XML、ASN.1、EXI 和 ProtoBuf 有深入研究的论文

    【讨论】:

      猜你喜欢
      • 2018-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 2011-09-13
      • 2010-10-08
      • 1970-01-01
      相关资源
      最近更新 更多