在json模式中定义键值对的正确方法是什么

在json模式中定义键值对的正确方法是什么,json,json.net,schema,jsonschema,Json,Json.net,Schema,Jsonschema,如何在json模式中定义键值对对象(正确的方式) 我想定义一下: "id" : 99, _info : { "name" : "somename", "href" : "someUrl" } 以下两项是否准确 (一) (二) 实现这一点的正确方法是什么?人们将知道序列化/反序列化时的模式和对象的外观是什么?在JSON中,对象已经是键值对的集合。您不需要任何特殊的东西来定义它: { "_info":{"type":"object"} } 从这里可以添加约束 如果您知道

如何在json模式中定义键值对对象(正确的方式)

我想定义一下:

"id" : 99,
_info : {
    "name" : "somename",
    "href" : "someUrl"
}
以下两项是否准确

(一)

(二)


实现这一点的正确方法是什么?人们将知道序列化/反序列化时的模式和对象的外观是什么?

在JSON中,对象已经是键值对的集合。您不需要任何特殊的东西来定义它:

{
    "_info":{"type":"object"}
}
从这里可以添加约束

  • 如果您知道密钥的名称,可以将它们添加到“属性”中
  • 如果知道所有可能的键,则将“additionalProperties”设置为false
  • 如果要限制可能的键名,请使用“patternProperties”
更新2019/09/10

正如注释中所建议的,如果要将所有属性限制为字符串类型,可以通过以下方式执行:

{
  "title": "Force every property to have a string value",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "additionalProperties": {"type": "string"}
}

问题是什么?为什么在选项1中使用
“type”:“array”
?示例数据中没有数组,但这并没有将值限制为字符串。看看Gustavo的模式尝试,看起来这就是他想要的…@tpei,我修改了答案来掩盖你的担忧。这太棒了。不知道
其他属性
可以接收对象。在本网站的其他答案中,还提出了许多更复杂的解决方案。
{
    "_info":{"type":"object"}
}
{
  "title": "Force every property to have a string value",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "additionalProperties": {"type": "string"}
}