问题
How do i define key value pairs object in json schema (the "correct" way) ?
i want to define this:
"id" : 99,
_info : {
"name" : "somename",
"href" : "someUrl"
}
Are any of the following two accurate?:
1)
{
"type": "object",
"name": "MyObj",
"properties": {
"id": {
"type": "integer"
},
"_info": {
"type": "array",
"items": {
"type": "object"
"properties": {
"key": {
"type": "string",
"description": "key"
},
"value": {
"type": "string",
"description": "the value"
}
}
}
}
}
}
2)
{
"type": "object",
"name": "MyObj",
"properties": {
"id": {
"type": "integer",
"_info": {
"type": "object",
"additionalProperties": {
"type": "string",
"description": "string values"
}
}
}
}
What is the correct way to get this accomplished and people will know what the schema is and the object will look like when serialized/deserialized?
回答1:
In JSON an object is already a collection of key-value pairs. You don't need anything special in order to define it:
{
"_info":{"type":"object"}
}
From here you can add constraints.
- If you know the name of the keys, you add them to "properties"
- If you know all possible keys, you set "additionalProperties" to false
- If you want to restrict the possible key names, you use "patternProperties".
Update 2019/09/10
As suggested in comments, if you want to restrict all properties to be of type string, you may do it this way:
{
"title": "Force every property to have a string value",
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"additionalProperties": {"type": "string"}
}
来源:https://stackoverflow.com/questions/26847903/what-is-the-correct-way-to-define-key-value-pairs-in-json-schema