Json-Editor is base on CodeMirrorr. Lint base on json-lint.

老规矩先来张效果图

下面捋一下实现步骤

1、安装CodeMirrorr、jsonlint

npm install codemirror
npm install jsonlint

2、编写Json-Editor组件

在如下位置新建JsonEditor文件夹及index文件

index文件全部内容如下:

<template><div class="json-editor"><textarea ref="textarea" /></div>
</template><script>
import CodeMirror from 'codemirror'
import 'codemirror/addon/lint/lint.css'
import 'codemirror/lib/codemirror.css'
import 'codemirror/theme/rubyblue.css'
require('script-loader!jsonlint')
import 'codemirror/mode/javascript/javascript'
import 'codemirror/addon/lint/lint'
import 'codemirror/addon/lint/json-lint'export default {name: 'JsonEditor',/* eslint-disable vue/require-prop-types */props: ['value'],data() {return {jsonEditor: false}},watch: {value(value) {const editorValue = this.jsonEditor.getValue()if (value !== editorValue) {this.jsonEditor.setValue(JSON.stringify(this.value, null, 2))}}},mounted() {// CodeMirror.fromTextArea()中第一个参数是DOM元素,而且必须是textarea元素;第二个参数是可选配置项this.jsonEditor = CodeMirror.fromTextArea(this.$refs.textarea, {lineNumbers: true,mode: 'application/json',gutters: ['CodeMirror-lint-markers'],theme: 'rubyblue',lint: true})this.jsonEditor.setValue(JSON.stringify(this.value, null, 2))this.jsonEditor.on('change', cm => {this.$emit('changed', cm.getValue())this.$emit('input', cm.getValue())})},methods: {getValue() {return this.jsonEditor.getValue()},}
}
</script><style scoped>
.json-editor{height: 100%;position: relative;
}
.json-editor >>> .CodeMirror {height: auto;min-height: 300px;
}
.json-editor >>> .CodeMirror-scroll{min-height: 300px;
}
.json-editor >>> .cm-s-rubyblue span.cm-string {color: #F08047;
}
.addbtn{margin-bottom: 15px;margin-left: 30px;
}
</style>

3、利用json-editor组件实现自己的逻辑,我就不放自己的业务代码了,下面是一个小demo可以参考

<template><div class="components-container"><div class="editor-container"><json-editor ref="jsonEditor" v-model="value" /></div></div>
</template><script>
import JsonEditor from '@/components/JsonEditor'const jsonData = '[{"items":[{"market_type":"forexdata","symbol":"XAUUSD"},{"market_type":"forexdata","symbol":"UKOIL"},{"market_type":"forexdata","symbol":"CORN"}],"name":""},{"items":[{"market_type":"forexdata","symbol":"XAUUSD"},{"market_type":"forexdata","symbol":"XAGUSD"},{"market_type":"forexdata","symbol":"AUTD"},{"market_type":"forexdata","symbol":"AGTD"}],"name":"贵金属"},{"items":[{"market_type":"forexdata","symbol":"CORN"},{"market_type":"forexdata","symbol":"WHEAT"},{"market_type":"forexdata","symbol":"SOYBEAN"},{"market_type":"forexdata","symbol":"SUGAR"}],"name":"农产品"},{"items":[{"market_type":"forexdata","symbol":"UKOIL"},{"market_type":"forexdata","symbol":"USOIL"},{"market_type":"forexdata","symbol":"NGAS"}],"name":"能源化工"}]'export default {name: 'JsonEditorDemo',components: { JsonEditor },data() {return {value: JSON.parse(jsonData)}}
}
</script><style scoped>
.editor-container{position: relative;height: 100%;
}
</style>

https://github.com/PanJiaChen/vue-element-admin/,感谢潘大佬提供给我们这么好的后台集成系统,有需要的可以自己去瞅瞅

vue利用CodeMirrorr+json-lint实现可编辑可自动格式化的Json-Editor组件相关推荐

  1. MonacoEditor 自动格式化sql json数据

    先上个效果吧: 安装: npm install vue-monaco-editor script中引用: import MonacoEditor from 'vue-monaco-editor' 引用 ...

  2. vue极简代码实现自定义可编辑行及操作按钮的Table表格组件(含源码及演示视频)

    效果图如下: 涉及到技术点包括: 父组件给子组件传值props.动态赋值 refs 对DOM进行操作,slot具名插槽的使用,插槽通过slot-scope给父组件传值 父组件代码: <templ ...

  3. linux服务器返回json,Linux 命令行工具解析和格式化输出 JSON的方法

    JSON 是一种轻量级且与语言无关的数据存储格式,易于与大多数编程语言集成,也易于人类理解 -- 当然,如果格式正确的话.JSON 这个词代表 J ava S cript O bject N otat ...

  4. json yeid_【分享】自动格式化输出JSON的小插件分享给大家

    大家在使用UNIT的时候,是不是经常要处理返回的JSON数据,经常需要复制粘贴到网页来进行格式转化很麻烦. 在这里写了一个JSON通用格式化输出的PYTHON代码:UNIT_JSON_FORMAT V ...

  5. 利用Idea中Gson插件快速编辑POJO类

    利用Idea中Gson插件快速编辑POJO类 (1)需求说明 现在有一个hashmap,想写一个POJO类实现它所有字段的get.set方法,当hashmap中字段较多的时候,过程会变成很繁琐的体力活 ...

  6. vue 在线编辑excel表格(原生和使用组件的两种方式)

    vue 在线编辑excel表格(原生和使用组件的两种方式) top表头和left表头格式的表格 <template><div><!-- 用组件写的编辑表格 -->& ...

  7. vue利用 vue-animate-number插件动态展示数字(从0动态滚动到指定数字)

    vue利用 vue-animate-number插件动态展示数字(从0动态滚动到指定数字) 第一步:安装vue-animate-number插件 $ npm install vue-animate-n ...

  8. 利用viewbag把数据对象传到前端并转换成json对象,及解决json字符串被转义问题

    利用viewbag把数据对象传到前端并转换成json对象,及解决json字符串被转义问题 参考文章: (1)利用viewbag把数据对象传到前端并转换成json对象,及解决json字符串被转义问题 ( ...

  9. ant design vue利用rowClassName给table添加行样式

    ant design vue利用rowClassName给table添加行样式 目录 1. 需求:表格每行数据hasVerdict值不为'1'时标红显示 2. 实现方式:table属性rowClass ...

最新文章

  1. Python中yield和yield from的用法
  2. go get 无法下载问题解决方案及下载 aliyun-oss-go-sdk incompatible.info
  3. [微信小程序]给data的对象的属性赋值
  4. leetcode算法题--螺旋矩阵
  5. java maven 读写pdf_Java 在PDF中加盖骑缝章
  6. SAP 电商云 Spartacus UI 有状态 的 url 和 title 属性的赋值代码
  7. EPSON TCP/IP 通信
  8. 【BZOJ3036】绿豆蛙的归宿 概率DP
  9. Windows Server 2008 R2 安全加固
  10. 计算机在数据处理方面的论文,数据挖掘论文3000字范文参考(2)
  11. 机器人学DH参数及利用matlab符号运算推导
  12. powell法-鲍威尔法详解-附案例matlab代码
  13. java毕业设计小区停车场管理系统(附源码、数据库)
  14. 【交易所相关】网关、席位、交易单元
  15. 上网日志留存_中国移动5G上网日志留存系统招标:最高投标总限价10亿元
  16. 洛谷刷题C语言:第一次,第二次,成交!、Bessie‘s Secret Pasture S、金币、Bookshelf B、东南西北
  17. 我的世界服务器如何做无限箱子,我的世界无限箱子制作方法图文攻略
  18. html多图轮播淡入淡出js,原生JS实现图片轮播与淡入效果的简单实例
  19. 锻铸件三维扫描逆向设计,助力新产品研发
  20. 项目实战:Qt贝塞尔曲线拽托顶点实时显示工具

热门文章

  1. Onvif/RTSP安防流媒体服务-配置CDN加速互联网直播
  2. 【GNN报告】GNN-LOGS部分报告汇总
  3. 怎么样给小孩取名字?准爸妈为孩子起名字的另类姿势
  4. 【无忧美名网-一款根据诗经、古诗词等国学给宝宝起名的小程序-uniapp端】
  5. 中国游戏出海-游戏海外本地化成功案例
  6. SkeyeVSS综合安防Onvif、RTSP、GB/T28181无插件直播点播解决方案之报警中心管理
  7. 03vivado_simulator仿真软件的使用
  8. 不要紧张,一切尽在掌握:应激源可控性的神经相关因素
  9. 论文阅读_DEVFormer
  10. Swiper插件读后感