当前位置: 首页 > 知识库问答 >
问题:

在JSON schema中,定义并引用一个可重用的enum类型?

高建本
2023-03-14

我注意到了以下几点:json模式中的可重用枚举类型,它谈到了在json模式下定义可重用的枚举类型。

我认为使用这个可重用的枚举类型是很简单的,只需为“type”值指定(在本例中)值“MyEnum”。

我不知道Oxygen XML的结果是否权威,但我尝试了如下内容:

{
    "$schema": "https://json-schema.org/draft/2019-09/schema#",
    "type": "object",
    "properties": {
        "content": {"$ref": "#/definitions/content_type"}
    },
    "additionalProperties": false,
    "definitions": {
        "costCategory_type": {
            "type": "object",
            "enum": ["VH", "H", "M", "L"]  
        },
        "allowedDevices_type": {
            "type": "object",
            "properties": {
                "costCategory": {
                    "type": "costCategory_type"
                },

在我引用“costCategory_type”的靠近底部的一行,Oxygen给了我一个语法错误,说:

#/定义/allowedDevices_type/属性/成本类别/类型: 未知类型: [costCategory_type]

我错过了什么?

共有1个答案

马安邦
2023-03-14

是的,type 关键字只能包含列表中的值 null布尔值对象数组字符串数字整数。您可以使用 $ref 关键字引用定义:

...
"properties": {
  "costCategory": {
    "$ref": "#/definitions/costCategory_type",
  }
}

(顺便说一句,您的定义永远不会按原样成功求值,因为您将其定义为“对象”类型,但枚举中的值列表都是字符串。)

 类似资料:
  • 我刚开始Java,到处搜索,但无论出于什么原因都找不到解决方案。我的问题对我来说似乎很简单:我在同一个文件夹中有两个类,那个文件夹是我的包,所以举例来说: 我需要在类2中创建一个类1的实例,但它就是不起作用。以下是一个示例: 文件路径: 文件路径:

  • 我有多个参数要引用,但我不想一个一个地指定它们。

  • 问题内容: 是否可以在SQL中的另一个用户定义表类型(嵌套的用户定义表类型)中使用用户定义的表类型。 我有高级发送表中的行的数据表。 请帮助如何将表行中的表数据从 asp.net发送到sql 。通过循环还是有任何简单的方法将嵌套表数据发送到服务器。 问题答案: 不,为什么会这样?这不是SQL Server(或任何关系数据库)的工作方式。 从TechNet的“用户定义的表类型”页面上: 限制 用户定

  • 问题内容: 我有一个定义自己的枚举的类,如下所示: 如果指定MyEnum.E1,它可以正常工作,但我真的很想将其作为“ E1”。您知道如何实现此目的,还是必须在另一个文件中定义它才能起作用? 结论:我无法正确获取导入的语法。由于有几个答案表明这是可能的,因此我将选择一个为我提供所需语法的文件,并对其他文件进行投票。 顺便说一下,这是一个真正的STRANGE部分(在我执行静态导入之前),我编写的使用

  • 问题内容: 有什么办法可以从类声明中引用类名称?一个例子如下: 我有一个读取此信息并进行一些设置的元类,基类实现了一些常用的保存内容。我希望能够创建像这样的递归定义,但是到目前为止,在我的实验中,我一直无法获得想要的效果,通常会遇到“未定义计划”错误。我了解发生了什么,该类的名称不在该类的范围内。 问题答案: 我有一个元类,可以读取此信息并进行一些设置 大多数使用元类的框架都提供了一种解决此问题的

  • 我刚开始使用Java,到处搜索,但无论出于何种原因都无法找到解决方案。我的问题对我来说似乎很简单:我在同一个文件夹中有两个类,该文件夹是我的包,为了说明: 我需要在第2类中创建第1类的实例,但它就是不起作用。这是一个示例: 文件路径: 文件路径: 我得到这个错误 根据要求,完整的源代码:注:class1=ClientIndividual,class2=涉众 第一个文件 第二个文件 第三个文件(接口