如何轻松更改多个模式中重复出现的 属性 名称?

How to easily change a recurring property name in multiple schemas?

为了能够反序列化多态类型,我在许多 JSON 对象中使用了类型鉴别器。例如,{ "$type": "SomeType", "otherProperties": "..." }

对于 具体 类型的 JSON 模式,我为类型指定了一个常量值。

{
  "type": "object",
  "properties": {
    "$type": { "const": "SomeType" },
    "otherProperties": { "type": "string" }
  }
}

这有效,但会在 许多 不同的 JSON 模式中分发所选的“$type”属性 名称。事实上,我们正在考虑将其重命名为“__type”以更好地与 BSON 配合使用。

我是否可以避免在所有受影响的架构中重命名此 属性?

我尝试寻找一种从其他地方加载 属性 名称的方法。据我所知 $ref 仅适用于 属性 值。

JSON 架构无法像您要求的那样从其他位置动态加载键值。特别是因为值会不同,而您只想从其他地方加载密钥。

虽然您不能使用 JSON 模式执行此操作,但您可以使用模板工具,例如 Jsonnet。我已经看到这个在规模上运作良好。

这需要您有一个 pre-processing 步骤,但这听起来像是您已经在计划的事情,创建某种管道来生成您的模式。

一句警告,注意现有的模式生成工具。它通常只适用于脚手架,需要大量修改。听起来您正在构建自己的系统,这可能是更好的方法。