【问题标题】:Json generic object typeJson 通用对象类型
【发布时间】:2016-04-12 19:02:10
【问题描述】:

我想定义一个类似这样的对象,以映射到类似 java Map 的东西(但不完全是,因为这也需要与 typescript 接口)。最终,我想弄清楚的是如何在另一个对象中声明<T> 类型的东西(比如Dict<MyObj>)(如果这可能的话):

(这显然不是一个有效的 json 模式)

{
    "type": "object",
    "javaType": "some.package.base.DictKeyValuePair",
    "properties": {
        "key": { "type": "string" },
        "value": { "type": "<T>" }
    }
}

将在其他 json 模式中引用,如下所示:

{
    "type": "object",
    "javaType": "some.package.base.Dict",
    "properties": {
        "key": { "type": "string" },
        "value": { "type": "<T>" },
        "keValuePairs": {
            "type": "array",
            "items": {
                "$ref": "DictKeyValuePair.json",
                "genericType": "<T>"
            }
        }
    }
}

终于被用在了类似这样的对象中:

{
    "type": "object",
    "javaType": "some.package.SomeObject",
    "properties": {
        "someDict": {
            "$ref": "Dict.json",
            "genericType": "SomeObjectOrSimpleType"
        }
    }
}

那么...这在 json 模式中是否可行?

【问题讨论】:

  • 需要解决这个确切的问题,表示一个 Dictionary 和 Tuple。你能分享任何经验教训吗?

标签: json jsonschema


【解决方案1】:

可以使用 json-schema 执行类似的操作,但您需要定义模式,请查看以下示例:

http://json-schema.org/learn/examples/address.schema.json

{
"$id": "https://example.com/address.schema.json",
"$schema": "http://json-schema.org/draft-07/schema#",
"description": "An address similar to http://microformats.org/wiki/h-card",
"type": "object",
"properties": {
"post-office-box": {
"type": "string"
},
"extended-address": {
"type": "string"
},
"street-address": {
"type": "string"
},
"locality": {
"type": "string"
},
"region": {
"type": "string"
},
"postal-code": {
"type": "string"
},
"country-name": {
"type": "string"
}
},
"required": [
"locality",
"region",
"country-name"
],
"dependencies": {
"post-office-box": [
"street-address"
],
"extended-address": [
"street-address"
]
}
}

【讨论】:

  • 从您的链接中,如何解决 json-schema 中的泛型概念并不明显。此外,由于链接很容易消失,也许您可​​以展示一个简短的示例,说明如何使用链接指向的内容更直接地回答问题。即使引用相关部分也会有所帮助。
  • 链接已成功消失,根据@rob3c
  • 此答案显示了类型定义的一个很好的示例,但该类型不是问题中要求的通用类型(即它没有任何类型变量)。
猜你喜欢
  • 1970-01-01
  • 2021-10-30
  • 1970-01-01
  • 2017-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多