在规范中描述JSON数据的最佳方法是什么?
在过去,我使用了'罗嗦'描述的例子,但感觉不精确.
似乎有一个新生的JSON模式标准,但它看起来不像一个非常活跃的项目.还有其他方法吗?
(更新)在考虑了好几天后,我喜欢使用转换约定的bmargulies建议.由于本案例中的JSON文档是.NET Web服务的出现,我将简单地用C#类语法记录模式.这可能不是非常严格,但所涉及的每个人都会理解它,并结合示例将尽快传达信息.
mol*_*arg 17
我会推荐我的js-schema JavaScript库.它背后的主要动机与你在问题中描述的相同.它是一种简单易懂的符号来描述JSON模式(或规范,如果需要).
JSON Schema中描述的示例模式:
{
"type":"object",
"properties":{
"id":{
"type":"number",
"required":true
},
"name":{
"type":"string",
"required":true
},
"price":{
"type": "number",
"minimum":0,
"required":true
},
"tags":{
"type":"array",
"items":{
"type":"string"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
以及与js-schema相同的模式描述:
{
"id" : Number,
"name" : String,
"price" : Number.min(0),
"?tags" : Array.of(String)
}
Run Code Online (Sandbox Code Playgroud)
该库能够针对模式验证对象,生成符合给定模式的随机对象,以及对JSON模式进行序列化/反序列化.
小智 5
使用某种扩展的 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
Run Code Online (Sandbox Code Playgroud)
您必须在某处定义诸如 INTEGER 和 STRING 之类的原子类型描述的含义。如果你想为字典添加非硬编码键,你可以定义如下:
BREADLOOKUP <- { (TYPE : HOWMANY)+ }
TYPE <- "white" | "dark" | "french" | "croissant"
HOWMANY <- POSITIVE-INTEGER
Run Code Online (Sandbox Code Playgroud)
这将允许像
{ "white": 5,
"french": 2
}
Run Code Online (Sandbox Code Playgroud)
由于正则表达式和 BNF 都是众所周知的,这可能是一种简单的方法。?, +, *, {n},{min,max}将是指定多个元素(取自正则表达式)的简单方法,其余部分几乎是纯 BNF。
如果你做得足够严格,它甚至可以被验证器解析。
| 归档时间: |
|
| 查看次数: |
20670 次 |
| 最近记录: |