使用type:JSON模式中的对象和属性

时间:2019-07-18 17:16:23

标签: jsonschema

我是JSON的新手。

我在JSON的各种示例中都看到了如下所示,其中复杂值以df_com_sales.groupby('Product Name')['Quantity'].sum().max(axis=0) 开头

df_com_sales.groupby('Product Name')['Quantity'].sum().max(axis=0)

我编写的JSON没有类型,对象和属性,如下所示。

"type":"object", properties { }

,并且没有错误地提交到在线JSON模式验证器。

{ "$schema": "http://json-schema.org/draft-06/schema#", "motor" : { "type" : "object", "properties" : { "class" : "string", "voltage" : "number", "amperage" : "number" } } } 的目的是什么?它是可选的吗?

1 个答案:

答案 0 :(得分:1)

是的,它是可选的,请尝试将其删除并使用验证程序。

{
    "$schema": "http://json-schema.org/draft-06/schema#",
    "foo": "bar"
}

您实际上甚至不需要使用$schema keyword,即{}是有效的json

我首先要了解什么是json,https://www.json.org/是最好的起点,但是您可能更喜欢像https://www.w3schools.com/js/js_json_intro.asp这样易于阅读的东西。

模式只是一个模板(或定义),以确保您为使用者生成有效的json

作为一个示例,假设您有一个应用程序,该应用程序解析一些json并查找名为test_score的键,并将值(分数)保存在某个表/列的数据库中。在此示例中,我们将称为表tests和列score。由于数据库列需要type,因此我们将为integer列选择一个数字类型,即score

一个有效的json示例如下

{
 "test_score": 100
}

按照此示例,应用程序将解析键test_score并将值100保存到tests.score数据库表/列。

但是假设没有分数,因此您输入了一个字符串,即"NA"

{
 "test_score": "NA"
}

当应用程序尝试将NA保存到数据库时,它将出错,因为NA是一个字符串,不是数据库期望的整数。

如果将每个示例都放入任何在线json验证器中,则它们是有效的json示例。但是,虽然使用"NA"100是有效的json,但对于需要使用json的实际应用程序无效。

所以现在您可能已经了解到json的作者可能会好奇

  

我可以将哪些有效类型用作测试值?   得分?

然后,责任由应用程序的编写者提供,客户端(作者)可以引用某种定义(即模式),以便作者确切地知道如何构造json,以便应用程序可以相应地对其进行处理。具有模式还可以使您验证/测试json,以便您知道它可以由应用程序处理,而无需实际通过应用程序发送json。

总而言之,在您看到的模式中说

"$test_score": {
    "type": "integer",
    "format": "tinyint"
},

json的作者现在知道他们必须传递一个整数,并且范围为0 to 255,因为它是tinyint。他们不再需要通过错误尝试不同的值来查看应用程序中的哪个值。这对于拥有架构有很大的好处。