您现在的位置是:网站首页> 编程资料编程资料
Monaco-editor 的 JSON Schema 配置及使用介绍_vue.js_
2023-05-24
294人已围观
简介 Monaco-editor 的 JSON Schema 配置及使用介绍_vue.js_
JSON Schema 作用用法
jsonschema 是描述 JSON 数据的格式并提供验证结果,就好比 typescript 对于 JavaScript 的作用。
JSON Schema Core Vocabulary
$schema
$schema 关键字既用作JSON模式方言标识符,也用作资源的标识符,资源本身就是一个JSON模式,它描述了为JSON编写的有效模式集。
该关键字的值必须是一个规范的URI。如果这个URI标识了一个可检索的资源,该资源的媒体类型应该是 application/schema+json。
$schema 关键字应该在文档根模式对象中使用,并且可以在嵌入模式资源的根模式对象中使用。它绝对不能出现在非资源根模式对象中。如果文档根模式中没有,则产生的行为是由实现定义的。

$id
$id 关键字用它的规范URI标识一个模式资源,这个URI是一个标识符,而不一定是网络定位器。对于网络可寻址URL,不会从其规范URI下载。
$id 不能包含非空的片段,也不应该包含空的片段。绝对URI形式必须被认为是规范URI,无论是否存在空片段。当前允许使用空片段,因为旧的元模式的 $id (或以前的id)中有一个空片段。未来的草案可能会完全禁止 $id 中的空片段。
在子模式中出现 $id 表示子模式在单个模式文档中构成一个不同的模式资源。此外,如果子模式中的 $id 是一个相对URI引用,则解析该引用的基URI是父模式资源的URI。
如果没有父模式对象显式地将自己标识为具有 $id 的资源,则基URI就是整个文档的基URI。
$ref
$ref 关键字是一个应用程序,用于引用静态标识的模式。它的结果是引用模式的结果。注意,这种确定结果的定义意味着其他关键字可以与 $ref 一起出现在同一个模式对象中。
$ref 关键字的值必须是一个URI-Reference字符串,可以是相对当前模式内部地址,也可以是网络地址。它根据当前URI基进行解析,生成要应用的模式的URI。在模式加载时执行这种解析是安全的,因为计算实例的过程不能改变引用解析的方式。

$dynamicRef
$dynamicRef 关键字是一个应用程序,它允许将完整的解析延迟到运行时,在计算实例时,每次遇到它都会被解析。
与 $dynamicAnchor 一起,$dynamicRef 实现了一种协作扩展机制,它主要用于递归模式(引用自身的模式)。扩展点和运行时确定的扩展目标都是用 $dynamicAnchor 定义的,并且只有在使用 $dynamicRef 引用时才显示运行时动态行为。
$dynamicRef 属性的值必须是一个URI-Reference字符串。它根据当前URI基进行解析,生成用作运行时解析起点的URI。
如果最初解析的起点URI包含一个由 $dynamicAnchor 关键字创建的片段,则初始URI必须被动态作用域中最外层模式资源的URI(包括片段)所替换,该资源定义了一个与 $dynamicAnchor 同名的片段。
否则,它的行为与 $ref 相同,不需要运行时解析。
简单来说,$dynamicRef 就是为了运行时递归解析 $dynamicAnchor 所定义的模式。
$anchor / $dynamicAnchor
使用JSON指针片段需要了解模式的结构。当编写模式文档意图提供可重用的模式时,最好使用不绑定到任何特定结构位置的普通名称片段。这允许重新定位子模式,而不需要更新JSON指针引用。
$anchor 和 $dynamicAnchor 关键字用于指定这样的片段。它们是标识符关键字,只能用于创建普通名称片段,而不是像 $id 那样的绝对uri。
除非需要指定 $dynamicAnchor,否则就使用 $anchor。
{ "$id": "https://example.net/root.json", "items": { "type": "array", "items": { "$ref": "#item" } }, "$defs": { "single": { "$anchor": "item", "type": "object", "additionalProperties": { "$ref": "other.json" } } } } $defs
$defs 关键字为当前模式保留了一个位置,以便将可重用的JSON模式内联到更通用的模式中。关键字不直接影响验证结果。
该关键字的值必须是一个对象。该对象的每个成员值必须是有效的JSON Schema。
例如,下面是一个描述正整数数组的模式,其中正整数约束是 $defs 中的子模式:
{ "type": "array", "items": { "$ref": "#/$defs/positiveInteger" }, "$defs": { "positiveInteger": { "type": "integer", "exclusiveMinimum": 0 } } } 关键字
JSON Schema包含一些关键字,它们不是严格用于验证,而是用于描述模式的各个部分。这些“注释”关键字都不是必需的,但是作为良好的实践,鼓励使用它们,并且可以使您的模式“自文档化”。
type
该关键字的值必须是字符串或数组。如果它是一个数组,数组的元素必须是字符串并且必须是唯一的。 字符串值必须是六种基本类型(null, boolean, object, array, number,或 String )中的一种,或者是匹配任何小数部分为零的数字的 integer。 如果 type 的值是一个字符串,那么如果实例的类型与该字符串值所表示的类型匹配,则实例验证成功。如果 type 的值是一个数组,那么实例验证成功的前提是它的类型与所指示的任何类型相匹配
title & description
这两个关键字的值必须是一个字符串。
这两个关键字都可以用来用该用户界面产生的数据信息装饰用户界面。标题最好是简短的,而描述将解释此模式所描述的实例的目的。

default
default 关键字指定一个默认值。此值不用于在验证过程中填充缺失的值。文档生成器或表单生成器等非验证工具可能使用此值向用户提示如何使用该值。但是,default 通常用于表示如果缺少一个值,那么该值在语义上与使用默认值时的值相同。default 的值应该根据它所在的模式进行验证,但这不是必需的。
examples
该关键字的值必须是一个数组。对数组中的值没有任何限制。
该关键字可用于提供与特定模式相关联的示例JSON值,以便演示使用方法。建议这些值对关联的模式有效。
如果存在,实现可以使用 default 值作为额外的示例。如果没有 examples,default 仍然可以以这种方式使用。证,但这不是严格要求的。不需要复制 examples 数组中的默认值,因为 default 将被视为另一个示例。

deprecated
deprecated 关键字是一个布尔值,表示该关键字所应用的实例值不应被使用,将来可能会被删除。

readOnly & writeOnly
布尔型关键字 readOnly 和 writeOnly 通常在API上下文中使用。readOnly 表示不修改该值。它可以用来表示更改值的PUT请求将导致400 Bad request响应。writeOnly 表示可以设置一个值,但将保持隐藏。In可以用来表示可以用PUT请求设置一个值,但是在用GET请求检索该记录时不包括它。
$comment
$comment 关键字严格用于向模式添加注释。它的值必须总是一个字符串。与注释标题、描述和示例不同,JSON模式实现不允许为其附加任何含义或行为,甚至可以随时剥离它们。因此,它们用于给JSON模式的未来编辑器留下注释,但不应用于与模式的用户通信。
enum
enum 关键字用于将一个值限制为一组固定的值。它必须是一个至少有一个元素的数组,其中每个元素都是唯一的。
如果 enum 数组的值包含该属性的值,则对该关键字验证成功。
const
const 关键字用于将一个值限制为单个值。
该关键字的值可以是任何类型,等同于只有一个值的 enum。
如果实例的值等于该关键字的值,则实例验证成功。
媒体类型关键字
{ "type": "string", "contentEncoding": "base64", "contentMediaType": "image/png" } contentMediaType
如果实例是字符串,则此属性指示字符串内容的媒体类型。如果存在 contentEncoding,则此属性描述已解码的字符串。
该属性的值必须是一个字符串,必须是一个媒体类型。
contentEncoding
此属性的值必须是一个字符串。
如果实例值是字符串,此属
相关内容
- el-form的label和表单自适应填满一行且靠左对齐方式_vue.js_
- 基于微信小程序实现透明背景人像分割功能_javascript技巧_
- 关于el-table-column的formatter的使用及说明_vue.js_
- Fragment 占位组件不生成标签与路由组件lazyLoad案例_vue.js_
- js中如何往对象中添加属性_javascript技巧_
- Vue中Mustache插值语法与v-bind指令详解_vue.js_
- 微信小程序下拉刷新组件加载图片(三个小点)不显示刷新状态的问题_javascript技巧_
- 关于antd-vue a-menu菜单绑定路由的相关问题_vue.js_
- vue点击按钮实现让页面的某一个元素全屏展示_vue.js_
- JavaScript移动端常用事件之touch触摸事件详解_javascript技巧_
