一、仿yapi实现json schema编辑

如图,在线编辑或导入json,并在json-schema编辑器中展示和编辑

这里有现成的插件,就没自己实现,我理解的大概实现原理,是一个树结构,然后根据类型去做一些细化的判断,比如说object的才可以有子节点等。

上面的是一个普通的json编辑器,这个网上很多插件。下面的是schema的编辑器,我用的是vue版本的,
json-schema-editor

这个编辑器,基本可以满足使用,但是我有个需要回显的功能,回显时不可以编辑,这个插件没有一些可以设定disadble状态的属性,所以我使用了css的pointer-events: none;通过样式来控制一下,但有个问题是,这个属性的鼠标的手势的权重较高,是cursor:pointer;但是我想要的是cursor: not-allowed,所以,产品和码农的悲欢并不相通,不过幸运的是,这是一个内部使用的工具,干不过技术的时候,就只好去干产品咯。后续有时间再去研究更好用的插件或者自己开发吧。

二、说一说这个json如何适应schema编辑器吧

1、json-schema的格式如下(请自行搜索规范格式)

{"type": "object","title": "title","properties": {"name": {"type": "string","default": "张三"},"age": {"type": "number","default": "11"},"hobby": {"type": "array","items": {"type": "string","default": "跑步"}},"aaaa": {"type": "object","properties": {"addr": {"type": "string","default": "北京1"}},"required": ["addr"]}},"required": ["age","hobby","aaaa"]
}

这个其实和下面的json是一样的

{"name": "张三","age": "11","hobby": ["跑步"],"aaaa": {"addr": "北京1"}
}

2、我有一个导入功能,就是上图的json编辑器,编辑一段json然后回显到schema编辑器的功能,所以需要有一个转换的方法,网上没有找到js 转换的,或者你有空在找一下也行

上码

data(){return{dataType: ["string", "boolean", "number"],}
}handleJson2JsonSchema2(data) {let obj = {};for (let key in data) {let param = data[key];let type = typeof param;obj[key] = {};if (this.dataType.includes(type)) {obj[key].type = type;obj[key].default = param;} else if (param instanceof Array) {let item = param[0] || "";obj[key].type = "array";let itemType = typeof item;if (this.dataType.includes(itemType)) {obj[key].items = {type: itemType || "string",default: item || ""};} else if (item instanceof Object) {obj[key].items = {};obj[key].items.type = "object";obj[key].items.properties = this.handleJson2JsonSchema2(item);}} else if (param instanceof Object) {obj[key].type = "object";obj[key].properties = this.handleJson2JsonSchema2(param);}}return obj;},

3、后来吧,后台其实并不想要schema格式的,但是前端又必须要用这个编辑器来展示,没办法,自己适应自己吧,再转回来呗

继续上码

data(){reutrn{dataType: ["string", "boolean", "number", "integer"]}
}
handleJsonSchema2Json(data) {let obj = {};for (let key in data) {let param = data[key];let type = param.type;obj[key] = {};if (this.dataType.includes(type)) {obj[key] = param.default || "";} else if (type === "array") {let items = param.items;if (this.dataType.includes(items.type)) {obj[key] = [items.default];} else {obj[key] = [this.handleJsonSchema2Json(items.properties)];}} else if (type === "object") {obj[key] = this.handleJsonSchema2Json(param.properties);}}return obj;}

4、就这样吧,一个转来又转去的小小工具

js json-schema 转换 json相关推荐

  1. js,jquery字符串转换json,兼容各种浏览器

    js,jquery字符串转json. 第一种:eval方式解析 function strToJson(str){ var json = eval('(' + str + ')'); return js ...

  2. 【Flutter】JSON 模型转换 ( JSON 序列化工具 | JSON 手动序列化 | 根据 JSON 编写 Dart 模型类 | 在线自动根据 JSON 转换 Dart 类 )

    文章目录 一.JSON 序列化工具 二.JSON 手动序列化 三.根据 JSON 编写 Dart 模型类 四.在线自动转换 五.相关资源 一.JSON 序列化工具 JSON 格式比较简单的话 , 使用 ...

  3. 如何利用JSON Schema校验JSON数据格式

    最近笔者在工作中需要监控一批http接口,并对返回的JSON数据进行校验.正好之前在某前端大神的分享中得知这个神器的存在,调研一番之后应用在该项目中,并取得了不错的效果,特地在此分享给各位读者. 什么 ...

  4. 什么是JSON schema,JSON schema也是JSON格式,刚开始学JSON,把JSON和JSON schema搞混了

    什么是JSON Schema? https://juejin.im/post/5ce3e4c6f265da1b6a346917 什么是JSON Schema? https://blog.csdn.ne ...

  5. JS中(JS转换json/jQuery转换json)中的long型大数精度丢失问题

    最近在后台向前台传输对象id时,遇到一个奇怪的问题.类似代码如下: var str = '{"id":217998860110340096}'; var jsonObj1 = $. ...

  6. JSON Schema

    XML有XML Schema,有Schema的好处就是可以校验文件是否符合规范,在代码提示上也会有许多好处.JSON Schema用于JSON验证. 如果说JSON是盛放数据的袋子,那么JSON Sc ...

  7. Kettle CSV文件与json文件转换实例

    一.CSV文件转换 CSV是Comma-Separated Values的缩写,即逗号分隔值.CSV文件是用逗号分隔数据字段的文件,因此也被称为逗号分隔值文件,有时会使用字符来替代逗号实现分隔,因此, ...

  8. CSV文件与json文件转换实例

    一.CSV文件转换 CSV作为数据转存的一种常用格式,它有特定的实现规则,具体如下: 文件开头不能留空,以"行"为单位: 文件可含或不含列名,若含有列名,则位于文件第一行: 文件中 ...

  9. php字符窜转json_php如何将字符串转换json

    php将字符串转换json的方法:首先创建一个PHP示例文件:然后使用"var_dump(json_decode($json));"方法转换json即可. php将字符串转换jso ...

  10. C# - JSON Schema validation

    C# - JSON Schema validation 引言 如何生成 C# 类 JSON Schema 利用在线工具 利用 Visual Studio 利用 NJsonSchema 验证 JSON ...

最新文章

  1. 两院院士评选2020年中国、世界十大科技进展揭晓,「机器学习模拟上亿原子」等入选 | AI日报...
  2. 《七笔勾》--陕北风光
  3. SharePoint 2013 Error - TypeError: Unable to get property 'replace' of undefined or null reference
  4. 进程间通信 - 命名管道实现
  5. vue 给页面添加enter回车事件 - 代码篇
  6. 【观点】健康的心智是中国未来最大的生产力
  7. 从上百幅架构图中学得半点大型网站建设经验(上)
  8. .net中有效的使用Cache
  9. Java基础markdown笔记整理(尚硅谷康师傅)
  10. python常用模块之time
  11. SATA,SAS,SSD 读写性能测试结果
  12. Go语言Web开发Revel框架搭建
  13. 什么是计算机技术作文500字,关于电脑的作文500字
  14. Mathematica/偏导数/最小二乘法(线性回归)
  15. html图片不能拖动,关于html5图片拖动的代码的问题?
  16. Python tkinter窗口最大化处理
  17. 领航机器人广告段子_关于领航
  18. CPU资源消耗原因和解决方案:
  19. Python中序列的累积计算
  20. 机器学习(五):深入浅出PCA降维

热门文章

  1. Heuristic Search - 15 Puzzle (16宫格)(A*+DIA*)
  2. 小学计算机教育课堂小故事,信息技术教师的教育故事
  3. matlab对数表示误码率,关于误码率的问题 急!!!!!
  4. 变压器空载合闸matlab,基于MATLAB的变压器空载合闸时励磁涌流仿真分析
  5. 数据库一对一 一对多 多对多关系
  6. 【廖雪峰】python正则表达式
  7. 人机交互-语音交互方法综述
  8. Flink Forward Asia 2019 | 总结和展望(附PPT)
  9. INSERT INTO 和 INSERT IGNORE INTO
  10. Mysql数据库查询表结构(用来写论文)