问题标签 [json-ref]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2695 浏览

json - 如何正确引用其他 JSON Schema 文档 ($ref)

我已经阅读了有关 JSON Schema 和 JSON 指针的 RFC,但我仍在努力理解如何正确引用其他文档。

假设我有以下文件(在磁盘上):

base.json 是这样的:

model.json 文件是这样的:

model.json 中的 $ref 值是我要问的。我对标准的理解是,在文档的id和$ref之间,我们应该可以找到文档。

或者,我想知道是否是这样的:

会工作?

但是这些解决方案似乎都不能使用我尝试过的 Python 或 PHP 库。我不确定我要去哪里错了?

0 投票
2 回答
10040 浏览

json - json 模式属性描述和“$ref”用法

我正在编写一个 json 模式来验证由 exe 生成的 json 输出。模式有点复杂,我定义了一些在属性中引用的“定义”(“$ref”:“#/definitions/...) . 在这里使用定义更加重要,因为我有一个定义是递归的情况。

我的模式现在运行良好,它正确验证了我的 json 输出。

现在,我正在尝试使用每个属性的“description”关键字正确记录架构。为了开发模式,我使用了一个以图形方式表示模式的编辑器 (XMLSpy)。它非常有用,但我遇到了一个奇怪的行为,我不知道这是编辑器的问题还是我不​​太明白。

这是解释我的问题的 json 模式的最小示例:

当我尝试向属性添加描述时,编辑器实际上在对象的定义中添加了描述。因此,编辑器会为属性“sourcePath”和“targetPath”显示此描述,此外它还会在“parentPath”中显示此描述。

我的意图是为每个属性提供三种不同的描述(可能还有定义本身,但这不是这里的问题)。如果我将它们手动添加到 json 架构中,则没有问题,但这些描述不会出现在图形编辑器中。

所以,我很困惑。

你认为这是我的图形编辑器的问题还是我错了?

基本上,当我们使用“$ref”来定义属性时,是否可以添加一些其他字段作为描述,或者使用“$ref”是否意味着不使用其他任何内容?在这种情况下,我怎样才能正确记录财产?

我必须向一些合作伙伴提供我的 json 模式,他们必须将它们用作文档来生成正确的 json 输出。所以,尽可能地,我想为他们提供一个自我记录的 json 模式,就像我们对 XML 所做的那样。

谢谢

0 投票
1 回答
27991 浏览

json - Liquid Studio:如何将 JSON 模式 $ref 写入另一个文件

我正在尝试使用带有 Liquid Studio 2017 的“$ref”来引用位于不同文件中的 JSON 模式。引用的 JSON 模式和引用的 JSON 模式都位于同一目录中。

我尝试使用相对路径:

并使用绝对路径:

和其他一些变化。它们都不起作用,我总是收到一条错误消息“无效的 URI”。此外,文档仅提到可以引用其他文档,而没有给出合理的示例。

所以我想知道,预期的 URI 格式是什么。

0 投票
1 回答
2333 浏览

json - json 复杂模式可重用定义,嵌套属性中的 $ref 验证被忽略

试图学习 JSON 模式,我有一个复杂的模式,它都是基于相对 URL 的。当嵌套属性调用另一个文件中定义的定义属性时,验证有时会被忽略。

我的目标是基本上在全球范围内制作可重用的定义和常用的枚举/常量/定义

假设项目树是:

根据我对$id根级别ref的工作原理的理解,它为模式设置了基本 uri,$ref相对于哪里。但是,在某些情况下,我的架构未针对错误值进行验证,而其他情况下。嵌套,或以其他方式。

datatypes.json

defs.json

frequent.json

base.json

pii/jobs.json

在 intellij 中,结果如下:(显示的每个属性都不应该是有效的,但是有些属性被简单地忽略和允许(如负数和空值等)。我没有收到关于 $ref 无法解决的警告/错误. 自动完成甚至为我完成了相对文件名和定义属性。

图1


编辑

在玩了一些之后,我发现它与相对 URL 有关。例如,在我的 pii(个人身份信息)文件夹中,作业模式所在的位置,如果我将该模式与其他模式一起移动到根目录,那么一切都会得到正确验证。为了说明新的项目树:

图2

为简洁起见,我的架构实际上并未存储在http://project.com. 根据我$id对这无关紧要的理解,这只是模式相互通信的一种方式。我想尽可能地模块化并将模式分离到它们自己的子文件夹(如 pii)中,但是在我的示例中它并没有验证这种方式。

0 投票
1 回答
2375 浏览

jsonschema - 在 JSON Schema 中使用 $ref 和其他属性

$ref例如,在 JSON 模式中,在同一模式中拥有一个和其他属性是有效的。

如果这是允许的,那么在解析$refed 和$refing 模式中定义的属性时有什么规则(在本例中minLengthdescription.allOf

0 投票
0 回答
141 浏览

json - 解析 serde_json/serde_yaml 中的“$ref”

递归解析JSON 文档中所有JSON$ref的最佳方法是什么?

一种直接的方法是创建一个Deserialize接受{"$ref"}对象或所需值的实现,例如这样的枚举:

但这需要我将所有类型都包装在 中JRef<T>,因此我的derive(Deserialize)模式结构充满了样板:

此外,参考的分辨率也是样板。

我知道类型的直接反序列化不应依赖于某些外部状态,因此首先反序列化为 aJRef然后再解析它们是有意义的。但是为了防止编写样板代码,稍后执行的解析可以使用自定义 proc-macro 执行,该宏派生原始类型的无 JRef 类型,它实现了接受外部函数并使用外部函数解析 URI 的特征。

到目前为止,我已经深入研究了依赖生态系统,以便只解决一个$ref. 我真的需要做所有这些,还是我错过了一个更简单的解决方案?

0 投票
1 回答
324 浏览

vue.js - 如何在带有 vue-json-schema-form 的 json-schema 中使用 $ref?

我正在尝试生成一个可以具有多个递归字段的表单。我使用了https://codepen.io/crickford/pen/ZmJqwd这个演示(我没有使用任何自定义组件)。每当我使用“$ref”时,它都会忽略它。我正在使用 vue-json-schema-form。这是 github 的链接https://github.com/crickford/vue-json-schema-form。即使我使用 "$ref":"#" 它也不起作用。

我的 Json 模式是有效的。即使我在 codepen 中替换了以下架构,我也没有得到预期的结果,因为它通过在此链接http://www.alpacajs.org/docs/api/recursive中编辑源的架构属性给了我正确的输出-references.html

我不知道我错在哪里了!!至少在 codepen 附加的模式代码中应该可以工作。请指导我或与我分享工作演示小提琴。提前致谢。

这是我的架构:

0 投票
4 回答
406 浏览

python - 这个 json 参考有什么问题吗?

我正在尝试获取一些包含引用的 JSON 并解决它们。我正在使用jsonref库来做到这一点。我已将我的问题减少到这两种情况:

第一个有效,但第二个抛出错误。为什么?

0 投票
0 回答
50 浏览

json - Gatsby JSON 加载器不遵循参考

将 JSON 或 YAML 文件直接导入 Gatsby 页面时,我需要取消引用(交换JSON References )。Gatsby 非常擅长直接导入 JSON 文件(可能是由于一些底层的 webpack 加载器),但它似乎不处理 JSON refs,a lá "$ref": "../something.json

例如:

父.json

child.json

index.js

我想可能 Gatsby 使用的默认 JSON 加载器不允许 JSON 引用。美好的。但是不能扩展 webpack 配置来尝试添加这个功能吗?这是我的尝试:

盖茨比-node.js

@ cloudflare /json-schema-ref-loader库是一个 webpack 加载器,旨在遵循 refs。所以我认为这可以使用。

运行gatsby develop时,构建失败并显示:

任何帮助将不胜感激。

0 投票
1 回答
17 浏览

json - 如何使用 JSON ref 合并多个列表?

我有以下 YAML

v1/publications.yml 有

我有点希望结果是我有以下 YAML

我可以一次做一个这样...

但我希望它添加多个而不更新我的源。