如何在现有JSON shema中使某些字段为可选

时间:2019-04-16 09:34:19

标签: json jsonschema json-schema-validator

我想使用单个JSON模式在我的应用程序中创建和更新(更新)记录。问题发生在required属性中,我不知道该如何更改以进行修补。我应该允许对记录进行部分更新。

我只能想到两个解决方案,但是这些解决方案对我来说都不是一件好事。我相信一定有更好的方法。

解决方案1: 即时修改架构以进行修补。基本上导入架构,删除required属性或对其进行修改,然后使用该架构进行验证。

解决方案2: 在补丁程序请求中,获取现有条目,然后应用来自请求的数据。

这是一个示例json模式:

{
  "$id": "https://myapp.com/schemas/post.schema.json",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Post",
  "description": "Blog post",
  "properties": {
    "title": {
      "type": "string",
      "description": "Post title"
    },
    "body": {
      "type": "string",
      "description": "Post content"
    }
  },
  "required": ["title", "body"]
}

最初,创建帖子时,我需要两个属性。以后,我只允许更改一个条目。因此,客户端只能将body发送到其余API,我应该能够根据架构正确验证它。

2 个答案:

答案 0 :(得分:1)

JSON Schema不了解其用法,因此您无法在JSON Schema中对其进行固有编码。

您可以创建两个模式,一个用于整个对象验证,一个用于补丁程序请求。在验证架构中,您将引用补丁架构,并添加required

但是,我不建议您这样做,因为您可能会发现对于以后无法创建和修补的行有不同的验证要求。

将补丁请求应用于对象,然后使用模式进行验证,然后保存到数据库中(假设这是您的最后一步),可能更自然。毕竟,您可能会发现您具有基于其他值的验证条件(这意味着您仍然需要在JSON Schema之外进行其他验证)。

答案 1 :(得分:0)

这些资源可能有用:

RFC-6902 JavaScript对象表示法(JSON)补丁

https://tools.ietf.org/html/rfc6902

JSON修补程序定义了JSON文档结构,用于表示要应用于JavaScript对象表示法(JSON)文档的一系列操作;它适合与HTTP PATCH方法一起使用。 “ application / json-patch + json”媒体类型用于标识此类补丁文档。

http://jsonpatch.com/

https://github.com/Starcounter-Jack/JSON-Patch

“ JSON-Patch标准(RFC 6902)的精简Javascript实现。使用增量补丁更新JSON文档。”

https://www.npmjs.com/package/fast-json-patch

使用JSON-Patch,您可以:     applyPatch以应用补丁     applyOperation以应用单个操作     验证补丁序列     观察变化(并在检测到变化时生成补丁)     比较两个对象(以获得差异)。