Vue 项目 JSON 在线编辑、校验如何选?

vue3+ts+vite环境中使用json-editor-vue3,记录遇到的奇奇怪怪问题!!! vue3+ts+vite环境中使用json-editor-vue3仅仅简单记录下最近使用这个插件的一些注意事项,这个插件很容易使用的。json-editor-vue3文档以上是我在实际使用json-editor-vue3的过程,最后说下为什么比较强大呢,因为它是由一个错误回掉的,这样我们是可以知道这个输入json内容和不合规的,并且怎么提示。 阅读详情
AI摘要

本文对比了Vue项目中常用的JSON在线编辑与校验方案,包括vue-json-pretty、jsoneditor及其Vue封装版本、svelte-jsoneditor及通用代码编辑器。重点分析各方案的功能完整性、校验能力、易用性和性能表现。

需求:支持用户在线编辑、保存 JSON,对修改的内容做限制/校验,使其符合 JSON 数据格式

方案一:vue-json-pretty

vue-json-pretty是 JSON 展示 + 轻量编辑组件,没有原生 schema 校验能力。如果要锁字段,必须自己套 schema 校验库(如ajv) 或者手动比对修改前后的字段结构。

问题:

1)需要套 ajv 或者手动比对进行校验,比较麻烦

2)比起其他方案,没有格式化、撤销、重做等功能

方案二:jsoneditor

jsoneditor 用纯 JavaScript 编写,可完成可视化编辑、格式化、校验、压缩、转换等操作,它同时提供树形、代码、纯文本等多种视图,支持 JSON Schema 实时校验 与自定义主题/插件,可轻松嵌入Vue、Reac 等主流框架。

安装:pnpm add jsoneditor

限制用户只能添加/删除数据而不修改层级结构和字段名的需求,可以通过原生 jsoneditor 配置权限+动态生成验证规则的方式来实现。核心思路是:根据后端返回的初始数据自动生成 “结构模板”,然后限制用户只能在数组中添加符合模板结构的元素,不能修改现有字段名和层级。

demo 代码:

<template>
  <div class="json-editor-box">
    <!-- 数据回来再渲染,保证第一次 new 就带 schema -->
    <div v-if="schema" ref="editorRef" style="height: 500px"></div>
    <el-button class="save-btn" type="primary" @click="saveJson">保存</el-button>
  </div>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import JSONEditor from 'jsoneditor'
import 'jsoneditor/dist/jsoneditor.min.css'
import { ElMessage } from 'element-plus'
import { getSituationStatusData } from '@/api/screen/overview.js'

const editorRef = ref(null)
const json = ref({})
const schema = ref(null)
let editor = null

/* 只锁字段名 & 类型 Schema */
const genSchema = (obj) => {
  if (Array.isArray(obj)) {
    return obj.length
      ? { type: 'array', items: genSchema(obj[0]), additionalItems: false }
      : { type: 'array', items: {} }
  }
  if (obj !== null && typeof obj === 'object') {
    const s = {
      type: 'object',
      properties: {},
      additionalProperties: false,
      required: Object.keys(obj)
    }
    for (const [k, v] of Object.entries(obj)) s.properties[k] = genSchema(v)
    return s
  }
  return { type: typeof obj }
}

/* 异步加载 → 第一次就带有效 schema */
const loadData = async () => {
  const res = await getSituationStatusData({ timeMode: 'day', orgId: '' })
  schema.value = genSchema(res) // 先给 schema
  json.value = res              // 再给数据
}

/* 挂载编辑器(schema 已有效) */
const initEditor = () => {
  editor = new JSONEditor(editorRef.value, {
    mode: 'code',
    enableSort: false,
    enableTransform: false,
    schema: schema.value,
    schemaRefs: {},
  }, json.value)

  // 双向绑定
  editor.aceEditor.on('change', () => {
    try { json.value = editor.get() } catch (e) {}
  })
}

/* 保存再验一次兜底 */
const saveJson = () => {
  editor.validate().then(errors => {
    if (errors.length) {
      ElMessage.error('字段名或层级结构被改动,请恢复后再保存!')
      return
    }
    console.log('校验通过', json.value)
    ElMessage.success('数据保存成功')
  })
}

onMounted(async () => {
  await loadData()   // 先拿数据
  initEditor()       // 再挂载编辑器(带有效 schema)
})
</script>

<style scoped>
.save-btn { 
  margin-top: 12px;
}
:deep(.jsoneditor-poweredBy) { 
  display: none;
}
</style>

效果:

在这里插入图片描述

vue-json-editor

vue-json-editor 是基于原生 jsoneditor 封装的 Vue 组件库,适用于 Vue2。

它的核心是将原生 jsoneditor 的功能包装成 Vue 组件的形式,支持通过 Vue2 语法调用,本质上还是依赖原生 jsoneditor 的核心能力。

安装依赖:

# 安装组件本身
pnpm add vue-json-editor
# 安装依赖的原生 jsoneditor 库
pnpm add jsoneditor

问题:

1)code 模式下输入中文存在重复

vue3-json-editor

vue3-json-editor 是专门为 Vue3 设计的封装库,内部依赖原生 jsoneditor 库,使用方式符合 Vue3 语法,支持通过 props 传递配置(如编辑模式、Schema 校验规则等),支持 v-model 双向绑定数据,无需手动管理编辑器实例的生命周期。

安装依赖:

# 安装组件本身
pnpm add vue3-json-editor
# 安装依赖的原生 jsoneditor 库
pnpm add jsoneditor

问题:

1)code 模式下输入中文存在重复

json-editor-vue3

json-editor-vue3 也是专门为 Vue3 设计的封装库,内部依赖原生 jsoneditor 库

安装依赖:

# 安装组件本身
pnpm add json-editor-vue3
# 安装依赖的原生 jsoneditor 库
pnpm add jsoneditor

对于 jsoneditor 的 demo,使用v-model绑定数据,通过:options传递配置项,通过ref="jsonRef"并访问jsonRef.value.editor获取原生实例,同时保留「结构锁」逻辑

demo 代码:

<template>
  <div class="json-editor-box">
    <!-- schema 有了再渲染 -->
    <json-editor-vue3
      v-if="jsonSchema"
      ref="jsonRef"
      v-model="jsonData"
      :options="editorOptions"
      language="zh"
      style="height: 400px"
    />
    <el-button class="save-btn" type="primary" @click="saveJson">保存</el-button>
  </div>
</template>

<script setup>
import { ref, computed, onMounted } from 'vue'
import JsonEditorVue3 from 'json-editor-vue3'
import { ElMessage } from 'element-plus'
import { getSituationStatusData } from '@/api/screen/overview.js'

const jsonData = ref({})
const jsonRef = ref(null)
const jsonSchema = ref(null)
const editorOptions = computed(() => ({
  mode: 'code',
  enableSort: false,
  enableTransform: false,
  schema: jsonSchema.value,
  schemaRefs: {}
}))

// 只锁字段名 & 类型 Schema
const getSchema = (obj) => {
  if (Array.isArray(obj)) {
    // 数组 → 返回 items 对象(不要返回数组)
    return obj.length
      ? { type: 'array', items: getSchema(obj[0]), additionalItems: false }
      : { type: 'array', items: {} }
  }
  if (obj !== null && typeof obj === 'object') {
    const s = { 
      type: 'object', properties: {},
      additionalProperties: false,   // 禁止添加新字段
      required: Object.keys(obj)    // 所有字段都为必填,禁止删除
    }
    for (const [k, v] of Object.entries(obj)) {
      s.properties[k] = getSchema(v)
    }
    return s
  }
  // 基本类型
  return { type: typeof obj }
}

const loadJsonData = async () => {
  const res = await getSituationStatusData({ timeMode: 'day', orgId: '' })
  jsonSchema.value = getSchema(res) // 更新 schema
  jsonData.value = res
}

// 保存前再校验一次
const saveJson = async () => {
  try {
    const errors = await jsonRef.value.editor.validate()
    // 校验不通过:提示错误
    if (errors?.length) {
      ElMessage.error('字段名或层级结构被改动,请恢复后再保存!')
      return
    }
    // 校验通过:执行保存逻辑
    console.log('校验通过', jsonData.value)
    ElMessage.success('保存成功')
  } catch (err) {
    console.error(err)
  }
}

onMounted(() => {
  loadJsonData()
})
</script>

<style scoped>
:deep(.jsoneditor-modes) { 
  display: none;
}
:deep(.jsoneditor-poweredBy) { 
  display: none;
}
.save-btn { 
  margin-top: 12px;
}
</style>

效果:

在这里插入图片描述

方案三:svelte-jsoneditor

svelte-jsoneditor 用 Svelte 重写,替代了 jsoneditor,更现代更轻量。提供了 vanilla-jsoneditor 包,Vue/React/Angular 一行即可引入,无需 Svelte 环境。它提供树形、代码、表格三模式,可流畅编辑 512 MB 文件;内置 ajv,支持 JSON Schema + 自定义校验器。

项目地址:https://github.com/josdejong/svelte-jsoneditor?tab=readme-ov-file

在 Svelte 项目中使用:

pnpm add svelte-jsoneditor

在纯 JavaScript 或其他框架中使用:

pnpm add vanilla-jsoneditor

demo 代码:

<template>
  <div class="json-editor-box">
    <!-- 数据回来再渲染,避免第一次 new 时无 schema -->
    <div 
      v-if="schema"
      ref="editorRef"
      class="json-editor-wrap"
      :class="{ pseudoFullScreen: isFull }"
      style="height: 500px"
    ></div>
    <el-button class="json-editor-save-btn" type="primary" @click="saveJson">保存</el-button>
  </div>
</template>

<script setup>
import { ref, onMounted, onUnmounted, watch } from 'vue'
import { createJSONEditor } from 'vanilla-jsoneditor/standalone.js'
import { createAjvValidator } from 'vanilla-jsoneditor/standalone.js'
import { ElMessage } from 'element-plus'
import { getSituationStatusData } from '@/api/screen/overview.js'

const editorRef = ref(null)
const content = ref({ 
  json: null,
  text: undefined
})
const schema = ref(null)  
const isFull = ref(false)
let editor = null                            

// 只锁字段名 & 类型 Schema
const getSchema = (obj) => {
  if (Array.isArray(obj)) {
    return obj.length
      ? { type: 'array', items: getSchema(obj[0]), additionalItems: false }
      : { type: 'array', items: {} }
  }
  if (obj !== null && typeof obj === 'object') {
    const s = {
      type: 'object',
      properties: {},
      additionalProperties: false,
      required: Object.keys(obj)
    }
    for (const [k, v] of Object.entries(obj)) s.properties[k] = getSchema(v)
    return s
  }
  return { type: typeof obj }
}

// 异步加载 → 第一次就带有效 schema
const loadData = async () => {
  const res = await getSituationStatusData({ timeMode: 'day', orgId: '' })
  schema.value = getSchema(res)
  content.value = { json: res } 
}

// 新增全屏按钮
const addFullScreenButton = () => {
  const header = editorRef.value.querySelector('.jse-menu') // 顶部菜单栏
  if (!header) return

  // 创建全屏按钮元素
  const fsBtn = document.createElement('button')
  fsBtn.className = 'jse-button jse-fullscreen iconfont icon-quanping1'
  fsBtn.title = '进入全屏'
  fsBtn.onclick = () => (isFull.value = !isFull.value)
  header.appendChild(fsBtn)
}

// 挂载编辑器(schema 已有效)
const initEditor = () => {
  // 创建 ajv 校验器
  const validator = createAjvValidator({ schema: schema.value, schemaRefs: {} })
  editor = createJSONEditor({
    target: editorRef.value,
    props: {
      content: content.value,
      mode: 'text',
      validator, // ajv 实时校验器
      mainMenuBar: true,
      // 自定义菜单项
      onRenderMenu: (items) => {
        // 目前尚未支持国际化,各个按钮的 title 需手动设置成中文
        const zhTitles = {
          'jse-format': '格式化JSON:添加正确的缩进和换行符(Ctrl+I)',
          'jse-compact': '紧凑JSON:移除所有空白和换行符(Ctrl+Shift+I)',
          'jse-undo': '撤销(Ctrl+Z)',
          'jse-redo': '重做(Ctrl+Shift+Z)'
        }
        // 只展示格式化、紧凑、撤销、重做这些按钮
        return items
          .filter(item => item.type === 'button' && ['jse-format', 'jse-compact', 'jse-undo', 'jse-redo'].includes(item.className))
          .map(item => ({
            ...item,
            title: zhTitles[item.className]
          }))
      },
      onChange: (updatedContent) => {
        content.value = updatedContent
      }
    }
  })
  // 在 createJSONEditor 之后再添加全屏按钮,否则找不到 header 元素
  addFullScreenButton()
}

// 保存再校验一次
const saveJson = async () => {
  const res = await editor.validate()
  const errors = res?.validationErrors ?? []   // 取数组再判断
  if (errors?.length) {
    ElMessage.error('字段名或层级结构被改动,请恢复后再保存!')
    return
  }
  const jsonData = JSON.parse(content.value.text)
  console.log('校验通过', jsonData)
  // 用户修改后调接口进行保存
  ElMessage.success('数据保存成功')
}

watch(isFull, val => {
  const btn = editorRef.value?.querySelector('.jse-button.jse-fullscreen')
  if (!btn) return
  btn.className = `jse-button jse-fullscreen iconfont ${val ? 'icon-tuichuquanping' : 'icon-quanping1'}`
  btn.title = val ? '退出全屏' : '进入全屏'
})

onMounted(async () => {
  await loadData()   // 先拿数据
  initEditor()       // 再挂载编辑器(带有效 schema)
})

onUnmounted(() => {
  if (editor) {
    editor.destroy()
    editor = null
  }
})
</script>

<style scoped>
/* 伪全屏样式 */
.json-editor-wrap.pseudoFullScreen {
  position: fixed;
  inset: 0;
  z-index: 1501;
  background: #fff;
  padding: 20px;
  height: 100vh !important;
}

:deep(.jse-button.jse-fullscreen) {
  margin-left: auto;
  background: none;
  border: none;
  font-size: 20px;
  color: #fff;
  cursor: pointer;
}

.json-editor-save-btn { 
  margin-top: 12px;
}
</style>

效果:

在这里插入图片描述

问题:

1)目前尚未支持国际化,菜单项各个按钮的 title 需手动设置成中文

2)相比 jsoneditor,没有全屏按钮,需要自行添加

方案四:代码编辑器

如 Ace/CodeMirror/Monaco 这些代码编辑器,支持 JSON 语法高亮、智能提示、实时校验、格式化等,原生支持 JSON Schema 校验,但体积较大,适合对功能要求高但对体积不敏感的场景。

方案对比

vue-json-prettyj’son’editorsvelte-jsoneditor代码编辑器
校验无原生支持,需手动集成 ajv 等库内置 JSON 语法校验 + 完整 JSON Schema 支持内置 ajv,支持 JSON Schema + 自定义校验器原生支持 schema 校验
格式化、撤销、重做无支持支持支持
体积体积极小,轻量体积较大比 jsoneditor 轻 50%,体积较小体积极大
大文件处理加载10MB 以上JSON 文件时会出现明显卡顿较好,支持虚拟滚动树/文本模式下直接编辑,可流畅编辑 512 MB 文件支持虚拟滚动 + 增量渲染
多语言无支持尚未支持支持
框架依赖仅支持 Vue支持 Vue/React/ 原生(需对应封装)无框架依赖(原生 JS)无框架依赖(可集成到任意框架)

总结:推荐使用 svelte-jsoneditor,比 jsoneditor 更轻量,内置 ajv,支持 schema 校验,大文件处理更流畅。

Vue开发者的JSON利器:全方位解析json-editor-vue 无论是开发。 阅读详情

相关推荐

Vue中实现Word文档渲染、在线编辑与保存的完整方案

在Web办公场景中,Word文档的在线预览与编辑始终是高频刚需。前端处理docx文件的核心原理,是通过解析Word的XML结构,将其转换为浏览器可渲染的HTML或接入独立文档服务。技术选型上,docx-preview适合轻量只读预览,OnlyOffice则提供接近原生体验的在线编辑能力。无论是OA审批、合同管理还是知识库,都需要在Vue项目中打通从文件流获取、文档渲染、用户编辑到服务端保存的完整链路。文章结合实战经验,详细拆解了基于docx-preview的预览实现、OnlyOffice的集成方式与异步回调

weixin_34060741的博客 219

json代码高亮显示插件vue-json-pretty

vue-json-pretty的用法 vue-json-pretty是用来格式化展示json数据的 GitHub : vue-json-pretty的详细用法 用法 npm下载 npm install vue-json-pretty --save 引入 import VueJsonPretty from 'vue-json-pretty'; import 'vue-json-pretty/lib/styles.css'; 注册组建 export default { components

qq_45021462的博客 1万+

WPS在线编辑对接实战:避坑指南与核心问题解析

在线文档编辑与协同办公已成为现代企业提升效率的关键技术。其核心原理在于通过云端服务将文档处理能力嵌入Web应用,实现多用户实时或异步协作。这项技术的价值在于打破了办公软件的地域和设备限制,极大地促进了团队的信息流转与共创。典型的应用场景包括在线合同审批、团队项目文档协作、教育领域的作业批改等。在实际工程实践中,与WPS这类第三方服务的对接,常会遇到文件格式兼容性、用户权限同步、回调接口安全等挑战。本文聚焦于WPS在线编辑对接中的文件处理与权限控制等关键环节,通过剖析文件健康性检查、动态权限生效机制等具体问题

weixin_33749131的博客 377

【亲测免费】 Vue Json Pretty 安装和配置指南

### 项目基础介绍 Vue Json Pretty 是一个用于将 JSON 数据渲染为树形结构的 Vue 组件。它支持 Vue 3,并且兼容 Vue 2。该组件不仅易于使用,还支持数据选择、大数据虚拟滚动、编辑等功能。 ### 主要编程语言 该项目主要使用以下编程语言和框架: - **JavaScript** - **TypeScript** - **Vue.js** ## 2. 项目使用的...

gitblog_07187的博客 2968

基于Vue的WPS在线编辑与预览:OnlyOffice集成与部署实践

在企业文档管理系统中,Office文件的在线预览与编辑一直是核心刚需。从技术选型看,官方WPS在线编辑受制于SaaS形态与严格审核,难以适应私有化部署场景,而OnlyOffice、kkFileView等开源方案则能灵活落地。预览层需按文件类型设计统一分发网关,兼顾PDF、图片及Office格式的高保真渲染;编辑层则要理解OnlyOffice的iframe嵌入、文档key规则以及回调保存机制。结合Vite代理配置、Docker Compose内存规划与JWT安全校验,才能真正实现稳定可用的在线编辑体验。这套基

weixin_32570803的博客 225

Vue集成WPS在线编辑与预览:方案选型与组件封装实战

在线文档编辑与预览是企业内部系统与SaaS产品的常见需求,核心挑战在于浏览器端对Word、Excel、PPT等格式的解析与渲染。目前主流实现路线分为两类:一是接入WPS开放平台在线编辑服务,通过iframe嵌入与签名鉴权获得完整编辑能力;二是采用docx-preview、x-spreadsheet等纯前端开源方案,在本地完成格式处理与轻量交互。前者兼容性强、支持协同批注,适合格式要求高的业务场景;后者部署简单、无外部依赖,适用于私有化或轻工具场景。本文以Vue工程为背景,重点拆解组件化封装思路、签名串生成、

weixin_27945229的博客 232

json-editor-vue 和 vue-json-pretty 怎么选?一份 JSON 查看组件选型终极指南

在 Vue 项目里展示 JSON 数据时,最经典的选型难题就是:JSON 查看组件选 json-editor-vue,还是 vue-json-pretty?本文用一张对比表 + 4 个真实场景,帮你在 3 分钟内做出不后悔的决定。 ## 🎯 一句话总结:看"只读展示"还是"可编辑编辑" - **vue-json-pretty**:轻量级 **JSON 查看组件**,只读树形结构、语法高亮、折

gitblog_00202的博客 1006

HTML页面嵌入Excel在线编辑:SheetJS+Handsontable实战

Excel在线编辑能力本质上是结构化数据在前端的解析、交互与序列化闭环。其核心原理在于将Excel文件二进制流(.xlsx/.xls)通过解析引擎转为可编程JSON,再由高性能表格UI组件实现单元格级编辑、公式计算与实时响应。该技术显著提升中后台系统数据录入效率,规避文件往返、格式错乱与权限依赖等传统痛点,具备零服务端转换、GDPR合规、离线可用等工程优势。本文聚焦纯前端落地路径,详解SheetJS与Handsontable协同机制,覆盖上传解析、双向绑定、公式支持、导出还原及安全加固等关键环节。

weixin_32612263的博客 7

Vue JSON在线编辑与校验最佳实践

在Vue项目中实现JSON在线编辑与校验,需综合考虑功能需求、开发效率、性能及扩展性。以下从编辑器选择、校验方案、集成方法三方面展开分析,并提供代码示例。微软开源的代码编辑器(VS Code同款),支持JSON语法高亮、自动补全和错误提示。适合需要深度定制或复杂交互的场景。轻量级专用JSON编辑器,提供树形视图和表单模式,内置校验功能。

ALl_fl2m的博客 382

vue-json-pretty:一个易于使用并且支持数据选择的JSON树视图组件

Vue组件,用于将JSON数据呈现为树结构。 现在,它至少支持Vue3。 如果你还在用Vue2,看到。 English | 产品特点 作为JSON格式化程序。 从JSON获取商品数据。 用具有可预测的静态类型的TypeScript编写。 支持大数据。 环境支援 现代浏览器,Electron和Internet Explorer 11(带有polyfill) 服务器端渲染 IE浏览器/边缘 火狐浏览器 Chrome 苹果浏览器 电子 IE11,边缘 最近的10个版本 最近的10个版本 最近的10个版本 最近2个版本 使用NPM或纱线 $ npm install vue-jso

VTK四视图联动避坑指南:解决vtkImagePlaneWidget窗宽窗位同步与切片序号更新的那些坑

本文详细解析了VTK四视图联动开发中的关键技术点与常见问题,包括切片位置同步、窗宽窗位同步的实现原理及回调机制设计。针对开发中遇到的回调事件不触发、渲染性能低下等问题,提供了实用的解决方案和优化技巧,帮助开发者高效构建医学影像和科学可视化应用。

weixin_42638178的博客 392

Vue3集成luckysheet实现Excel在线编辑

本文详细介绍了在Vue3项目中集成Luckysheet在线表格组件的完整方案及问题解决过程。主要内容包括: 安全优化方案 提出三种解决裸URL访问漏洞的方案:临时签名过渡方案、Vue3集成原版Luckysheet、迁移Univer新组件,最终选择中长期的Vue3集成方案。 技术实现细节 通过CDN方式引入Luckysheet资源 使用MutationObserver监听实现标题字数限制 事件委托机制处理返回按钮跳转及悬浮提示残留问题 全局资源管理确保组件卸载时完全清理

Mr.小灰狼_随笔 911

【图文步骤】EC-Engineer部分操作详细步骤

EC-Engineer部分功能详细使用手册

weixin_42212468的博客 6173

Vue3 项目集成 OnlyOffice 在线编辑 + 自定义插件开发(一)

一个配置文件 + 一个桥接 html + 你的 Vue 插件页面。

qq_43284411的博客 1700

【C语言基础】野指针与空指针

全网最接地气的C语言野指针介绍,此处对于野指针与空指针知识点做一些简要的介绍,作者实属初学,写博客也是作者学习的一个过程,难免文章中有内容理解不到位或者有不当之处,还请朋友们不吝指正,希望大家多多给予支持,赠人玫瑰,手有余香! 文章目录一:野指针1.1 :野指针的成因2.1 :规避野指针二:空指针 一:野指针 概念:野指针就是指向的内存地址是未知的(随机的,不正确的,没有明确限制的)。 说明:指针变量也是变量,是变量就可以任意赋值。但是,任意数值赋值给指针变量没有意义,因为这样的指针就成了野指针,此指针指向

qq_43727529的博客 2万+

elmos 524系列芯片笔记

芯片的工作工作原理:集成芯片Elmos524.03有发射回路和接收回路,手册有关的内部原理图,大致如下: 芯片会产生固有频率的电压信号,信号通过引脚DRV1、2输出给外部压电陶瓷片,产生固定频率的机械波,也就是所谓的超声波,超声波遇到障碍物时会反射,反射信号经过AINS、D引脚进入芯片,在芯片内部先后经过GAIN放大,滤波然后进入比较器,滤波后的信号(signal)同预先设定的阈值(threshold)比较产生信号输出。此信号最终会连接MCU处理器,需要重点关注。 基于这个内部的工作原

qq_38230916的博客 2489

快马AI助力:5分钟打造可视化Vue JSON编辑器,提升开发效率!

实际体验下来,从创建项目到最终上线只用了一杯咖啡的时间。最惊喜的是部署环节——传统方式要折腾Nginx配置和域名解析,在这里点个按钮就搞定了。对于需要快速验证想法的场景,这种开发体验真的能救命。最近在开发一个需要动态编辑JSON数据的项目,手动处理JSON格式总是容易出错,于是尝试用vue-json-editor这个组件来提升效率。记录下整个实现过程,特别推荐用。如果你也需要处理JSON数据,不妨试试这个方案,用。五分钟就能搭出成品,比从零开始写代码轻松太多了!快速搭建,效果出乎意料的好用。

CyanWave34的博客 695

KITTI数据集下载及解析

KITTI数据集下载及解析 版本 更新时间 更新内容 作者 1 V 1.0 xxx 完成主体内容 W. Xiao 2 文章目录KITTI Dataset1 简介1.1 数据采集平台1.2 坐标系2 数据解析2.1 image文件2.2 velodyne文件2.3 calib文件2.4 label文件3 KITTI可视...

u013086672的博客 5万+

Vue项目集成OnlyOffice:Word在线编辑与保存实战指南

在Web应用开发中,文档的在线预览和编辑是高频需求,尤其在企业办公、合同管理和协作平台中更是核心功能。这类功能通常依赖前端渲染技术或服务端文档处理引擎,前者如docx-preview等轻量库,后者则以OnlyOffice Document Server为代表。从原理上看,纯前端方案通过解析docx结构映射为DOM或Canvas,实现简单但编辑能力有限;而基于独立文档服务器的方案,则通过iframe嵌入编辑器,由后端统一处理文档解析、权限校验和保存回写,支持多人协同编辑,数据完全可控。在实际的Vue项目中,通

weixin_33843947的博客 366

开源遥感语义分割工具箱mmsegmentation基于Lovedata数据集训练模型

开源遥感语义分割工具箱mmsegmentation基于Lovedata数据集训练模型

yilvyangguang520的博客 500

[系统安全] 十一.那些年的熊猫烧香及PE病毒行为机理分析

如果你想成为一名逆向分析或恶意代码检测工程师,或者对系统安全非常感兴趣,就必须要认真分析一些恶意样本。熊猫烧香病毒就是一款非常具有代表性的病毒,当年造成了非常大的影响,并且也有一定技术手段。本文将详细讲解熊猫烧香的行为机理,并通过软件对其功能行为进行分析,这将有助于我们学习逆向分析和反病毒工作。后续作者还将对其进行逆向调试,以及WannaCry勒索蠕虫、各种恶意样本及木马的分析。基础性文章,希望您喜欢!同时,本文部分实验参考姜晔老师的视频分析,真的非常佩服和值得去学习的一位老师。技术路上哪有享乐,为了提升安

杨秀璋的专栏 7327

Vue项目集成OnlyOffice实现Word在线编辑与回写实战

在Web应用开发中,文档在线预览与编辑已成为OA、合同管理等系统的核心需求。实现Word文档的在线修改与保存回写,需要理解渲染、编辑、存储三阶段的选型差异:纯前端渲染库仅适用于只读场景,真正可编辑的方案需引入具备文档内核的服务。OnlyOffice作为自托管开源方案,支持在线编辑、协同与回调保存,可结合Vue组件快速集成。本文从需求边界出发,对比多种技术方案,详解OnlyOffice的Docker部署、Vue端API接入、JWT鉴权及保存回调链路,并总结白屏、403、乱码等高频踩坑问题,为需要实现文档在线编

weixin_33866037的博客 383

PCL体素滤波器【2026最新版】

PCL实现的VoxelGrid类和ApproximateVoxelGrid体素滤波,详细记录。博客长期更新,本文最近一次更新时间为:2026年3月14日。

点云侠的博客 39万+

Java+Vue集成OnlyOffice:构建企业级协同办公在线编辑方案

在线编辑Office文档是OA、知识库、项目管理等企业内部系统的常见刚需,但实现起来涉及复杂格式渲染、多人实时协同与数据安全。OnlyOffice作为开源文档服务器,将编辑内核独立部署,通过API与业务系统解耦,既支持内网数据流转,又具备丰富的协同能力。Java后端负责权限控制、文档配置生成与回调保存,Vue前端通过官方SDK快速嵌入编辑器,前后端配合可搭建完整链路。在实践过程中,需重点关注文档key的缓存策略、JWT回调鉴权、文件持久化以及多角色权限映射等细节,合理规划部署架构与异常处理,即可实现稳定可靠

weixin_33462167的博客 303

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

JeecgBoot + EuroOffice 协同文档在线编辑全栈接入指南(支持 JWT 安全校验)

前排提示:本文面向有 Spring Boot + Vue 基础的开发者,全流程覆盖 Docker 部署、服务端接口、前端集成、JWT 安全校验、回调保存机制。可直接移植到 JeecgBoot 项目。

FinelyYang的专栏 233

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

FastAPI + Django Ninja + Vue3 构建合同在线编辑与签署系统全解析

在数字化转型的推动下,电子合同已逐步取代纸质文件,成为企业线上交易与法务管理的核心载体。这类系统的落地,离不开富文本编辑、文档渲染、文件格式转换、工作流状态机等基础技术能力的支撑。其中,在线编辑要求内容结构化存储与版本可追溯,PDF 生成需兼顾中文排版与防篡改需求,签署环节则依赖严格的身份验证和状态流转设计,以保障电子签名的法律效力。FastAPI 与 Django Ninja 作为 Python 生态中的两大主流 API 框架,分别在异步高并发和后台管理便捷性上各有优势,可组合用于构建双后端架构;而 Vu

weixin_42656416的博客 287

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: Echarts -- ZRender 源码分析
下一篇: Qiankun 生命周期与数据通信实战
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值