如何在规范中描述JSON数据?

如何在规范中描述JSON数据?,json,Json,在规范中描述JSON数据的最佳方式是什么 在过去,我曾使用过“冗长”描述的例子,但感觉不准确 似乎有一个新的标准,但它看起来不像一个非常活跃的项目。还有别的办法吗 (更新)思考了几天后,我喜欢B关于使用转换约定的详细建议。由于本例中的JSON文档来自.NETWeb服务,因此我将简单地用C#class语法记录模式。这可能并不完全严格,但所有相关人员都会理解,并结合示例尽快传达信息。使用某种扩展BNF如何 PERSON <- { "firstname": FIRSTNAMES, "lastn

在规范中描述JSON数据的最佳方式是什么

在过去,我曾使用过“冗长”描述的例子,但感觉不准确

似乎有一个新的标准,但它看起来不像一个非常活跃的项目。还有别的办法吗



更新)思考了几天后,我喜欢B关于使用转换约定的详细建议。由于本例中的JSON文档来自.NETWeb服务,因此我将简单地用C#class语法记录模式。这可能并不完全严格,但所有相关人员都会理解,并结合示例尽快传达信息。

使用某种扩展BNF如何

PERSON <- { "firstname": FIRSTNAMES, "lastname": LASTNAME, "age": AGE, "version": VERSION, "parents" <- PARENTS }

FIRSTNAMES <- [ FIRSTNAME+ ]

FIRSTNAME <- STRING

LASTNAME <- STRING

PARENTS <- [ PERSON{0,2} ]

AGE <- INTEGER

VERSION <- 1 | 2
因为正则表达式和BNF都是众所周知的,所以这可能是一种简单的方法 去吧
+
*
{n}
{min,max}
将是指定大量元素(取自正则表达式)的简单方法,其余元素几乎都是纯BNF


如果您做得足够严格,它甚至可以作为验证器

您可以将W3C XML模式或一些不太难看的模式(如RelaxNG)与转换约定相结合。

我知道这是一个较老的问题,但它可能对其他人有用: 在寻找描述JSON数据的方法时,我偶然发现了。这是头版右侧的摘要:

有序是一种描述JSON的文本格式。Order可以编译成JSONSchema。它被设计为易于阅读和书写

我同意这一点,但到目前为止,我只尝试过使用相对简单的结构。

我建议使用我的JavaScript库。它背后的主要动机与你在问题中描述的相同。它是一种简单易懂的符号,用于描述JSON模式(或者规范,如果您愿意的话)

JSON模式中描述的示例模式:

{
“类型”:“对象”,
“财产”:{
“id”:{
“类型”:“编号”,
“必需”:true
},
“姓名”:{
“类型”:“字符串”,
“必需”:true
},
“价格”:{
“类型”:“编号”,
“最小值”:0,
“必需”:true
},
“标签”:{
“类型”:“数组”,
“项目”:{
“类型”:“字符串”
}
}
}
}
以及与js模式相同的模式描述:

{
“id”:编号,
“name”:字符串,
“价格”:最小数量(0),
“?标记”:数组(字符串)
}

该库能够根据模式验证对象,生成符合给定模式的随机对象,和序列化/反序列化JSON模式。

您需要一种指定JSON模式的标准方法,还是一种根据规范编写检查数据工具的正式方法?主要是为了一致性,我需要一种标准的符号/语法,其他阅读规范的人已经熟悉了。用于验证样本的工具也将非常有用,并且对于单元测试非常有用。无论您做什么,都不要丢失示例。它们是描述您的模式的最佳方式。不过,对于所有的极端情况,您都需要一些其他的东西。这会起作用,但它会丢失JSON文档的固有嵌套,而且整体结构需要考虑太多(至少对我来说!)您可以发布一个您想要描述的JSON结构的示例吗?我不熟悉RelaxNG。。。但我喜欢使用转换约定的想法。
BREADLOOKUP <- { (TYPE : HOWMANY)+ }

TYPE <- "white" | "dark" | "french" | "croissant"

HOWMANY <- POSITIVE-INTEGER
{ "white": 5, 
  "french": 2
}