将对象键用作JSON模式

时间:2019-08-19 12:27:50

标签: json intellij-idea yaml jsonschema

说我想针对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

因此属性名称可以是任何字符串,但是依赖项只能是根对象的键/属性名称。理想情况下,我将指定一个枚举,但是这个问题表明不可能Use object property keys as enum in JSON schema(除非答案已经过时)。

仍然,我注意到,当您在Intellij中编写模式并添加"required" = [...]时,它会自动填写带有“属性”对象的属性名称的必填字段(即使它不使用它们来验证,但足够接近我的目的)。我已经为http://json-schema.org/draft-07/schema#签出了架构,但是还无法理解它是如何做到的。

有没有一种方法可以定义我的模式,以便像定义模式时一样,Intellij根据其他属性的键自动完成?

1 个答案:

答案 0 :(得分:1)

模式本身中没有任何内容指示数据中可能的值。实际上,并不需要在属性中也定义必需数组中的项。

此类功能仅由IDE定义。 IntelliJ IDEA记录了添加自定义架构的能力:

  

除了JSON模式存储中的模式外,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在显示时会转义HTML字符   文档弹出窗口中的JSON模式定义文档。至   获得具有丰富HTML标记的美观文档,存储HTML   x-intellij-html-description扩展属性中的描述   而不是描述。

https://www.jetbrains.com/help/idea/json.html#ws_json_show_doc_in_html

但是

  

基于其他属性的键自动完成

听起来像是专门为编写JSON模式而设计的自定义功能。 JSON Schema本身不能动态引用数据(我认为这就是您的想法)。