sách gpt4 ai đã đi

json - hạn chế các giá trị JSON thành tên của các đối tượng JSON khác

In lại 作者:行者123 更新时间:2023-12-05 06:40:31 29 4
mua khóa gpt4 Nike

我想使用 JSON 架构来验证某些值。我有两个对象,称它们为 trackedItems 和 trackedItemGroups。 trackedItemGroups 是组名称和 trackedItems 名称列表。例如,架构类似于:

"TrackedItems": {
"type": "array",
"items": {
"type": "object",
"properties": {
"TrackedItemName": { "type": "string" },
"Properties": { ---- }
}
}
},
"TrackedItemGroups": {
"type": "array",
"items": {
"type": "object",
"properties": {
"GroupName": {
"type": "string"
},
"TrackedItems": {
"type": "array",
"items": {"type": "string"}
}
}
}
}

我想验证 TrackedItemGroups 中的每个字符串的 TrackedItems array 是在 TrackedItems.TrackedItemName 中定义的名称.

这类似于使用 liệt kê属性来限制值,但是 liệt kê列表是根据 TrackedITems.TrackedItemName 中的值生成的.

如何编写架构以使用 JSON 自己的数据进行验证?

我知道我可以四处移动,即 TrackedItems 定义它们所在的组,但有数百个跟踪项目,而且这种组织方式更适合我的用例。

我已经试过了:

"TrackedItems": {
"type": "array",
"items": {
"oneOf": [
{"$ref":"#/properties/TrackedItems/items/properties/TrackedItemName"}
]
}
}

但这会导致错误:

Newtonsoft.Json.Schema.JSchemaReaderException: Could not resolve schema reference '#/properties/TrackedItems/items/properties/TrackedItemName'.

对于数据示例,如果我有 TrackedItems:

项目 1、项目 2、项目 A、项目 B、项目 C

和组:

第 1 组: Item1, ItemB, ItemC

第 2 组: Item1, Item2, ItemZ

Group2 会引发违规,因为它包含未在 TrackedItems 中定义的项目。

1 Câu trả lời

BẰNG验证(以及由琐碎断言描述的某些其他事物)的词汇表,JSON 模式不提供验证数据一致性的方法。

验证意味着像“验证 X 是一个字符串”这样的断言。

一致性意味着诸如“验证 X 是现有活跃用户的 ID”之类的事情。

由于被比较的数据可能完全在另一个数据库中,并且由于这些类型的断言很重要,因此 JSON Schema 将验证数据的一致性留给了应用程序和/或其他技术。一些实现具有用于文档内比较的特定于供应商的扩展,但是这些都不是标准化的,我不知道有什么可以在这里工作。


$ref 引用在这里不起作用,因为它只是一种通过引用替换另一个模式的方法。如果您可以设法使引用起作用(我不确定为什么会出现错误,这是特定于实现的细节),则此模式:

{ "oneOf": [
{"$ref":"#/properties/TrackedItems/items/properties/TrackedItemName"}
] }

与说完全一样:

{ "oneOf": [
{"type": "string"}
] }

既然你问的是“验证以下陈述之一是否为真”,这也等同于简单地:

{"type": "string"}

这并不是说您不能使用 JSON Schema 在 JSON 中声明数据之间的关系,但 JSON Schema 对于使用 URI 和超链接来这样做有些自以为是。

关于json - 将 JSON 值限制为其他 JSON 对象的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42448780/

29 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com