English | 简体中文
JSON editor & viewer for Vue 2.6 / 2.7 / 3 & Nuxt 2 / 3, powered by svelte-jsoneditor (successor to jsoneditor).
- Support Vue 2.6 / 2.7 / 3
- Support SSR (Nuxt 2 / 3)
- Edit mode two-way binding
- Local registration + local configuration, or global registration + global configuration (Powered by vue-global-config)
vue
vanilla-jsoneditor
standalone bundle provided by svelte-jsoneditor@vue/composition-api
only for Vue 2.6 or earlier
npm add json-editor-vue vanilla-jsoneditor
<template>
<JsonEditorVue v-model="value" v-bind="{/* local props & attrs */}" />
</template>
<script setup>
import JsonEditorVue from 'json-editor-vue'
const value = ref()
</script>
import { createApp } from 'vue'
import JsonEditorVue from 'json-editor-vue'
createApp()
.use(JsonEditorVue, {
// global props & attrs (one-way data flow)
})
.mount('#app')
<div id="app">
<json-editor-vue v-model="value"></json-editor-vue>
<p v-text="value"></p>
</div>
<script type="importmap">
{
"imports": {
"vue": "https://unpkg.com/vue/dist/vue.esm-browser.prod.js",
"vue-demi": "https://unpkg.com/vue-demi/lib/v3/index.mjs",
"vanilla-jsoneditor": "https://unpkg.com/vanilla-jsoneditor",
"json-editor-vue": "https://unpkg.com/[email protected]/dist/json-editor-vue.mjs"
}
}
</script>
<script type="module">
import { createApp, ref } from 'vue'
import JsonEditorVue from 'json-editor-vue'
createApp({
setup: () => ({
value: ref()
})
})
.use(JsonEditorVue)
.mount('#app')
</script>
npm add json-editor-vue vanilla-jsoneditor
<template>
<JsonEditorVue v-model="value" v-bind="{/* local props & attrs */}" />
</template>
<script setup>
import JsonEditorVue from 'json-editor-vue'
const value = ref()
</script>
import Vue from 'vue'
import JsonEditorVue from 'json-editor-vue'
Vue.use(JsonEditorVue, {
// global props & attrs (one-way data flow)
})
<div id="app">
<json-editor-vue v-model="value"></json-editor-vue>
<p v-text="value"></p>
</div>
<script type="importmap">
{
"imports": {
"vue": "https://unpkg.com/vue@2/dist/vue.esm.browser.min.js",
"vue-demi": "https://unpkg.com/vue-demi/lib/v2.7/index.mjs",
"vanilla-jsoneditor": "https://unpkg.com/vanilla-jsoneditor",
"json-editor-vue": "https://unpkg.com/[email protected]/dist/json-editor-vue.mjs"
}
}
</script>
<script type="module">
import Vue from 'vue'
import JsonEditorVue from 'json-editor-vue'
new Vue({
components: { JsonEditorVue },
data() {
return {
value: undefined,
}
},
})
.$mount('#app')
</script>
npm add json-editor-vue vanilla-jsoneditor @vue/composition-api
<template>
<JsonEditorVue v-model="value" v-bind="{/* local props & attrs */}" />
</template>
<script>
import Vue from 'vue'
import VCA from '@vue/composition-api'
import JsonEditorVue from 'json-editor-vue'
Vue.use(VCA)
export default {
components: { JsonEditorVue },
date() {
return {
value: undefined,
}
},
}
</script>
import Vue from 'vue'
import VCA from '@vue/composition-api'
import JsonEditorVue from 'json-editor-vue'
Vue.use(VCA)
Vue.use(JsonEditorVue, {
// global props & attrs (one-way data flow)
})
It's quite messy this way due to
vanilla-jsoneditor
does not export UMD.
<div id="app">
<json-editor-vue v-model="value"></json-editor-vue>
<p v-text="value"></p>
</div>
<script>
window.process = { env: { NODE_ENV: 'production' } }
</script>
<script type="importmap">
{
"imports": {
"vue": "https://unpkg.com/[email protected]/dist/vue.esm.browser.min.js",
"@vue/composition-api": "https://unpkg.com/@vue/composition-api/dist/vue-composition-api.mjs",
"@vue/composition-api/dist/vue-composition-api.mjs": "https://unpkg.com/@vue/composition-api/dist/vue-composition-api.mjs",
"vue-demi": "https://unpkg.com/vue-demi/lib/v2/index.mjs",
"vanilla-jsoneditor": "https://unpkg.com/vanilla-jsoneditor",
"json-editor-vue": "https://unpkg.com/[email protected]/dist/json-editor-vue.mjs"
}
}
</script>
<script type="module">
import { createApp, ref } from '@vue/composition-api'
import JsonEditorVue from 'json-editor-vue'
const app = createApp({
setup: () => ({
value: ref()
})
})
app.use(JsonEditorVue)
app.mount('#app')
</script>
npm add json-editor-vue vanilla-jsoneditor
<!-- ~/components/JsonEditorVue.client.vue -->
<template>
<JsonEditorVue v-bind="attrs" />
</template>
<script setup>
import JsonEditorVue from 'json-editor-vue'
const attrs = useAttrs()
</script>
<template>
<client-only>
<JsonEditorVue v-model="value" v-bind="{/* local props & attrs */}" />
</client-only>
</template>
<script setup>
const value = ref()
</script>
// ~/plugins/JsonEditorVue.client.ts
import JsonEditorVue from 'json-editor-vue'
export default defineNuxtPlugin((nuxtApp) => {
nuxtApp.vueApp.use(JsonEditorVue, {
// global props & attrs (one-way data flow)
})
})
<template>
<client-only>
<JsonEditorVue v-model="value" />
</client-only>
</template>
<script setup>
const value = ref()
</script>
npm add json-editor-vue vanilla-jsoneditor
// nuxt.config.js
export default {
build: {
extend(config) {
config.module.rules.push({
test: /\.mjs$/,
include: /node_modules/,
type: 'javascript/auto',
})
},
},
}
<template>
<client-only>
<JsonEditorVue v-model="value" v-bind="{/* local props & attrs */}" />
</client-only>
</template>
<script setup>
import { ref } from 'vue'
const JsonEditorVue = () => process.client
? import('json-editor-vue')
: Promise.resolve({ render: h => h('div') })
const value = ref()
</script>
// nuxt.config.js
export default {
plugins: ['~/plugins/JsonEditorVue.client'],
build: {
extend(config) {
config.module.rules.push({
test: /\.mjs$/,
include: /node_modules/,
type: 'javascript/auto',
})
},
},
}
// ~/plugins/JsonEditorVue.client.js
import Vue from 'vue'
import JsonEditorVue from 'json-editor-vue'
Vue.use(JsonEditorVue, {
// global props & attrs (one-way data flow)
})
<template>
<client-only>
<JsonEditorVue v-model="value" />
</client-only>
</template>
<script setup>
import { ref } from 'vue'
const value = ref()
</script>
npm add json-editor-vue vanilla-jsoneditor @vue/composition-api
// nuxt.config.js
export default {
build: {
extend(config) {
config.module.rules.push({
test: /\.mjs$/,
include: /node_modules/,
type: 'javascript/auto',
})
},
},
}
<template>
<client-only>
<JsonEditorVue v-model="value" v-bind="{/* local props & attrs */}" />
</client-only>
</template>
<script>
import Vue from 'vue'
import VCA from '@vue/composition-api'
Vue.use(VCA)
export default {
components: {
JsonEditorVue: () => process.client
? import('json-editor-vue')
: Promise.resolve({ render: h => h('div') }),
},
data() {
return {
value: undefined,
}
},
}
</script>
// nuxt.config.js
export default {
plugins: ['~/plugins/JsonEditorVue.client'],
build: {
extend(config) {
config.module.rules.push({
test: /\.mjs$/,
include: /node_modules/,
type: 'javascript/auto',
})
},
},
}
// ~/plugins/JsonEditorVue.client.js
import Vue from 'vue'
import VCA from '@vue/composition-api'
import JsonEditorVue from 'json-editor-vue'
Vue.use(VCA)
Vue.use(JsonEditorVue, {
// global props & attrs (one-way data flow)
})
<template>
<client-only>
<JsonEditorVue v-model="value" />
</client-only>
</template>
<script>
export default {
data() {
return {
value: undefined,
}
},
}
</script>
Name | Description | Type | Default |
---|---|---|---|
v-model | binding value | any |
|
mode | edit mode, use v-model:mode in Vue 3 or :mode.sync in Vue 2 |
Mode | 'tree' |
... | properties of svelte-jsoneditor |
⚠ kebab-case is required for tag & prop name when using from CDN
svelte-jsoneditor
An object contains a stringified JSON or a parsed JSON, will doJSON.parse
when passing as a stringified JSON.json-editor-vue
JSON itself. What users see is what users get.
If you prefer the behavior of svelte-jsoneditor
:
<JsonEditorVue
:content="content" :onChange="updatedContent => {
content = updatedContent
}"
/>
See josdejong/svelte-jsoneditor#166 for more details.
Including the boolean properties of svelte-jsoneditor
like readOnly
with no value will imply true
:
-
✔️
<JsonEditorVue readOnly />
-
✔️
<JsonEditorVue :readOnly="true" />
name | description | type |
---|---|---|
jsonEditor | JSONEditor instance | object |
type Mode = 'tree' | 'text'
<template>
<JsonEditorVue class="jse-theme-dark" />
</template>
<script setup>
import 'vanilla-jsoneditor/themes/jse-theme-dark.css'
import JsonEditorVue from 'json-editor-vue'
</script>
Detailed changes for each release are documented in the release notes.
PR welcome! 💗
-
npm add pnpm @cloydlau/scripts -g; pnpm i
-
Start
pnpm dev3
pnpm dev2.7
pnpm dev2.6