json - 在 JSON Schema 中使用对象键作为类型
问题描述
假设我想根据 Intellij IDEA 中的 JSON 模式验证 YAML 文件。该文件的结构如下:
foo:
command: touch /tmp/a.txt # I know I don't need this but it's an example
bar:
command: echo "Hello World!" > /tmp/a.txt
baz:
command: cat /tmp/a.txt
dependencies:
- foo
- bar
因此属性名称可以是任何字符串,但依赖项只能是根对象的键/属性名称。理想情况下,我会指定一个枚举,但这个问题表明不可能在 JSON 模式中将对象属性键用作枚举(除非答案已过时)。
不过,我注意到,当您在 Intellij 中编写模式并添加 a"required" = [...]
时,它会使用“属性”对象的属性名称自动完成所需字段(即使它不使用它们来验证,但对于我的目的来说足够接近)。我已经检查了它的架构http://json-schema.org/draft-07/schema#但无法理解它是如何做到的。
有没有一种方法可以定义我的架构,以便 Intellij 根据另一个属性的键自动完成,就像定义架构时一样?
解决方案
架构本身没有任何内容可以指示数据的可能值。实际上不需要在属性中定义所需数组中的项目。
这种功能仅由 IDE 定义。IntelliJ IDEA 记录了添加自定义模式的能力:
除了来自 JSON Schema Store 的模式之外,IntelliJ IDEA 还允许您配置和使用来自其他存储的自定义模式。您可以下载所需的架构并将其存储在项目根目录下或指定资源的 URL,以便 IntelliJ IDEA 可以自动下载架构。
要配置自定义 JSON 架构:
在设置/首选项对话框 ⌘, 中,转到语言和框架 | 模式和 DTD | JSON 模式映射。
https://www.jetbrains.com/help/idea/json.html#ws_json_schema_add_custom
后面还会详细介绍如何让智能感知提供丰富的预览:
在 JSON 模式中使用 HTML 描述
默认情况下,IntelliJ IDEA 在文档弹出窗口中显示 JSON 模式定义的文档时会转义 HTML 字符。要获得具有丰富 HTML 标记的漂亮文档,请将 HTML 描述存储在 x-intellij-html-description 扩展属性而不是描述中。
https://www.jetbrains.com/help/idea/json.html#ws_json_show_doc_in_html
然而,
基于其他属性键的自动完成
听起来像是专门为编写 JSON Schema 而设计的自定义功能。JSON Schema 本身不能像那样动态地引用数据(我认为这是您的想法)。
推荐阅读
- ios - 无法在 MacBook M1 上通过 Bundler 安装 CocoaPods
- r - 在 R 中计算字符串
- javascript - React Native - JS 文件中的 TypeScript?
- javascript - React 中的乱码动画
- javascript - 加载 reactjs 后 css 动画无法正常工作
- c# - 在 WPF 中访问 UserControl Name 属性
- textures - WebGPU:在运行时更改纹理
- node.js - cPanel 目录“public_html”不允许的问题
- excel - VBA 不会延长 24 小时
- python - trinket.io 和 repl.it 上的持续缩进错误 - 无法删除