首页 > 解决方案 > 使用 json 模式验证 json 仅包含 ascii 字符

问题描述

我们正在与硬件设备连接,我们正在上传 json 配置文件。该设备无法处理 json 上任何地方的非 ascii 字符 - 即使转义使用也不行\uXXXX

我们已经在使用 draft-07 进行模式验证,所以我们想在模式中指定这个约束。我们可以对所有字符串设置正则表达式约束。

但问题是我们必须additionalProperties: true在几个地方拥有 - 并且附加属性必须允许任何 json 值。但我们还必须将它们限制为仅包含 ascii 字符。

这可以在模式中指定吗?

示例简化模式:

{
   "$schema":"http://json-schema.org/draft-07/schema#",
   "type":"object",
   "properties":
   {
      "channel":
      {
        "type":"array",
        "items":
         {
            "type":"object",
            "properties":  { "name":{"type":"string"} },
             "required":["name"],
            "additionalProperties":true
         }
      }
   },
   "required":["channels"],
   "additionalProperties":true
}

不应验证的示例 json:

{
  "channels":[ {"name":"temperature", "input": "temp in °C"}],
  "other":[ {"mykey": "ü"}],
  "danish": "æøå"
}

标签: jsonschema

解决方案


的值additionalProperties是 JSON 模式本身(布尔值也是 JSON 模式!)。

如果您将 的值设置为additionalProperties与其他属性类似的值,它将应用于所有其他属性。

如果您想要一个示例,请提供一个我可以使用的示例架构,我很乐意展示。


推荐阅读