限制整个 JSON 架构中的字符?

Restrict characters across all of a JSON schema?

我有一些无法正确处理 Unicode 的第 3 方软件。我想通过提供一个不允许非 ascii 字符的 JSON 模式来表示这一点。对于个人价值,我可以说

{
    "type": "string",
    "pattern: "^[a-zA-Z0-9]*$"
}

它描述了我要找的东西。

但是,我希望能够只说架构中的 all 字符串匹配此模式。我可以做一个自定义格式,但这似乎并没有好多少:

{
    "type": "string",
    "format": "ascii-string"
}

有没有办法指定我希望每个字符串都默认为此 format/pattern?

您可以通过将指定模式的模式递归地应用到所有子对象来完成此操作,其中 $ref 指向对象(additionalProperties)和数组(items)的子对象在本身。看起来像:

{
  "pattern": "^[a-zA-Z0-9]*$",
  "additionalProperties": {
    "$ref": "#"
  },
  "items": {
    "$ref": "#"
  }
}

https://jsonschema.dev/s/YsM20

请注意,我使用了您示例中的模式,尽管这并没有达到您所说的效果,仅限于 ascii。您可以在其他地方找到该部分的解决方案,例如Regex to test if only ASCII characters

您可能还希望添加 "propertyNames": {"$ref": "#"},因为对象 属性 名称不是架构适用的正常值。