ASN.1和JSON并不是严格可比的。JSON是一种数据格式,而ASN.1是一个模式语言加上多个编码规则集,每个规则集对于给定模式会产生不同的数据格式。因此,原始问题有点类似于“XML Schema与XML:何时使用它们?”更公平的比较应该是ASN.1和JSON Schema。 尽管如此,还有一些需要考虑的要点: ASN.1具有二进制编码规则。考虑到对于您的应用程序来说,二进制还是文本编码更合适。 ASN.1也有XML和JSON编码规则。如果您喜欢,可以选择使用基于文本的ASN.1进行编码。 ASN.1允许开发其他编码规则。在ITU-T为JSON指定编码规则之前,我们指定了自己的规则将ASN.1编码为JSON。我在我们公司网站上发表了这篇文章 这里 与XML Schema一样,存在用于编译ASN.1的工具。这些通常被称为数据绑定工具。编译器输出由用于保存数据的数据结构和用于对各种编码(二进制、XML、JSON)进行编码/解码的代码组成。 我不确定是否存在任何用于JSON Schema的数据绑定工具。我也不确定JSON Schema有多成熟/稳定,而ASN.1则非常成熟和稳定。 在选择JSON Schema和ASN.1之间,请注意JSON Schema绑定到JSON,而ASN.1没有绑定到任何特定的表示。
您可以使用ASN.1,无论您需要将消息序列化以供使用C、C++、C#、Java或任何其他编程语言的ASN.1编码器/解码器引擎发送到接收者。 ASN.1还提供了多种编码规则,具有不同情况下的优点。例如,在数字证书等关键情况下,需要规范编码时使用DER,而在带宽关键协议(例如移动通信)中使用PER,当您不关心带宽并希望在浏览器中显示编码或与XML模式引擎交换消息时,则使用E-XER。请注意,使用良好的ASN.1工具,您无需更改应用程序代码即可在这些ASN.1编码规则之间切换。一个简单的函数调用就可以选择您想要使用的编码规则。