使用类型:JSON 模式中的对象和属性
Use of type : object and properties in JSON schema
我是 JSON 的新手。
我在 JSON 的各种示例中看到,如下所示,其中复杂值以 "type":"object", properties { }
为前缀
{
"$schema": "http://json-schema.org/draft-06/schema#",
"motor" : {
"type" : "object",
"properties" : {
"class" : "string",
"voltage" : "number",
"amperage" : "number"
}
}
}
我写的 JSON 没有类型、对象和属性,如下所示。
{
"$schema": "http://json-schema.org/draft-06/schema#",
"motor" : {
"class" : "string",
"voltage" : "number",
"amperage" : "number"
}
}
并提交给在线 JSON 模式验证器,没有错误。
type:object, properties { }
的目的是什么?是可选的吗?
是的,它是可选的,请尝试删除它并使用您的验证器。
{
"$schema": "http://json-schema.org/draft-06/schema#",
"foo": "bar"
}
实际上你甚至不需要使用 $schema keyword 即 {}
是有效的 json
我首先要了解 json 是什么,https://www.json.org/ is the best place to start but you may prefer something easier to read like https://www.w3schools.com/js/js_json_intro.asp。
架构只是一个模板(或定义),用于确保您为消费者生成有效的json
举个例子,假设您有一个应用程序解析一些 json 并查找名为 test_score
的键并将值(分数)保存在数据库中的一些 table/column.对于此示例,我们将调用 table tests
和列 score
。由于数据库列需要 type,我们将选择数字类型,即 integer
用于我们的 score
列。
一个有效的json例子可能看起来像
{
"test_score": 100
}
按照此示例,应用程序将解析键 test_score
并将值 100
保存到 tests.score
数据库 table/column.
但是假设没有分数,所以你输入一个字符串,即 "NA"
{
"test_score": "NA"
}
当应用程序尝试将 NA
保存到数据库时,它将出错,因为 NA
是一个字符串,而不是数据库期望的整数。
如果您将这些示例中的每一个放入任何在线 json 验证器中,它们都是有效的 json 示例。但是,虽然使用 "NA"
或 100
是有效的 json,但对于需要使用 json.
的实际应用程序是无效的
所以现在你可能明白 json 的作者可能想知道
What are the different valid types I can use as values for my test
score?
然后责任落在应用程序的编写者身上,提供客户(作者)可以参考的某种定义(即模式),以便作者确切地知道如何构建 json 所以应用程序可以相应地处理它。拥有架构还允许您 validate/test 您的 json 因此您知道它可以由应用程序处理,而实际上不必通过应用程序发送您的 json。
所以把它放在一起让我们在你看到的模式中说
"$test_score": {
"type": "integer",
"format": "tinyint"
},
json 的作者现在知道他们必须传递一个整数并且范围是 0 to 255
因为它是一个 tinyint。他们不再需要错误地尝试不同的值并查看应用程序处理了哪些值。这是拥有模式的一大好处。
我是 JSON 的新手。
我在 JSON 的各种示例中看到,如下所示,其中复杂值以 "type":"object", properties { }
{
"$schema": "http://json-schema.org/draft-06/schema#",
"motor" : {
"type" : "object",
"properties" : {
"class" : "string",
"voltage" : "number",
"amperage" : "number"
}
}
}
我写的 JSON 没有类型、对象和属性,如下所示。
{
"$schema": "http://json-schema.org/draft-06/schema#",
"motor" : {
"class" : "string",
"voltage" : "number",
"amperage" : "number"
}
}
并提交给在线 JSON 模式验证器,没有错误。
type:object, properties { }
的目的是什么?是可选的吗?
是的,它是可选的,请尝试删除它并使用您的验证器。
{
"$schema": "http://json-schema.org/draft-06/schema#",
"foo": "bar"
}
实际上你甚至不需要使用 $schema keyword 即 {}
是有效的 json
我首先要了解 json 是什么,https://www.json.org/ is the best place to start but you may prefer something easier to read like https://www.w3schools.com/js/js_json_intro.asp。
架构只是一个模板(或定义),用于确保您为消费者生成有效的json
举个例子,假设您有一个应用程序解析一些 json 并查找名为 test_score
的键并将值(分数)保存在数据库中的一些 table/column.对于此示例,我们将调用 table tests
和列 score
。由于数据库列需要 type,我们将选择数字类型,即 integer
用于我们的 score
列。
一个有效的json例子可能看起来像
{
"test_score": 100
}
按照此示例,应用程序将解析键 test_score
并将值 100
保存到 tests.score
数据库 table/column.
但是假设没有分数,所以你输入一个字符串,即 "NA"
{
"test_score": "NA"
}
当应用程序尝试将 NA
保存到数据库时,它将出错,因为 NA
是一个字符串,而不是数据库期望的整数。
如果您将这些示例中的每一个放入任何在线 json 验证器中,它们都是有效的 json 示例。但是,虽然使用 "NA"
或 100
是有效的 json,但对于需要使用 json.
所以现在你可能明白 json 的作者可能想知道
What are the different valid types I can use as values for my test score?
然后责任落在应用程序的编写者身上,提供客户(作者)可以参考的某种定义(即模式),以便作者确切地知道如何构建 json 所以应用程序可以相应地处理它。拥有架构还允许您 validate/test 您的 json 因此您知道它可以由应用程序处理,而实际上不必通过应用程序发送您的 json。
所以把它放在一起让我们在你看到的模式中说
"$test_score": {
"type": "integer",
"format": "tinyint"
},
json 的作者现在知道他们必须传递一个整数并且范围是 0 to 255
因为它是一个 tinyint。他们不再需要错误地尝试不同的值并查看应用程序处理了哪些值。这是拥有模式的一大好处。