What is vue-json-pretty?
vue-json-pretty is a Vue.js component for rendering JSON data in a pretty, formatted way. It is useful for displaying JSON data in a readable format with syntax highlighting and collapsible nodes.
What are vue-json-pretty's main functionalities?
Pretty JSON Rendering
This feature allows you to render JSON data in a visually appealing format. The component takes a JSON object as a prop and displays it with proper indentation and styling.
<template>
<vue-json-pretty :data="jsonData" />
</template>
<script>
import VueJsonPretty from 'vue-json-pretty';
import 'vue-json-pretty/lib/styles.css';
export default {
components: { VueJsonPretty },
data() {
return {
jsonData: {
name: "John Doe",
age: 30,
city: "New York"
}
};
}
};
</script>
Collapsible Nodes
This feature allows you to collapse and expand nodes in the JSON structure. By setting the 'deep' prop, you can control the initial depth of expanded nodes, making it easier to navigate large JSON objects.
<template>
<vue-json-pretty :data="jsonData" :deep="1" />
</template>
<script>
import VueJsonPretty from 'vue-json-pretty';
import 'vue-json-pretty/lib/styles.css';
export default {
components: { VueJsonPretty },
data() {
return {
jsonData: {
name: "John Doe",
details: {
age: 30,
city: "New York"
}
}
};
}
};
</script>
Other packages similar to vue-json-pretty
react-json-view
react-json-view is a React component for displaying JSON data in a similar pretty format with collapsible nodes. It offers more interactivity, such as editing JSON data directly in the view, which vue-json-pretty does not support.
jsoneditor
jsoneditor is a web-based tool that provides a tree view and code editor for JSON data. It is more feature-rich compared to vue-json-pretty, offering editing capabilities, search, and validation, but it is not specifically designed for Vue.js.
json-formatter-js
json-formatter-js is a standalone JavaScript library for rendering JSON in a collapsible tree format. It is framework-agnostic and can be used with any JavaScript project, whereas vue-json-pretty is specifically for Vue.js applications.

English | 简体中文
Features
- As a JSON Formatter.
- Written in TypeScript, support
d.ts
.
- Support get item data from JSON.
- Support big data.
- Support editable.
Environment Support
- Modern browsers, Electron and Internet Explorer 11 (with polyfills)
- Server-side Rendering
IE11, Edge | last 10 versions | last 10 versions | last 10 versions | last 2 versions |
Using NPM or Yarn
$ npm install vue-json-pretty --save
$ yarn add vue-json-pretty
Use Vue2
$ npm install vue-json-pretty@v1-latest --save
Usage
The CSS file is included separately and needs to be imported manually. You can either import CSS globally in your app (if supported by your framework) or directly from the component.
<template>
<div>
<vue-json-pretty :data="{ key: 'value' }" />
</div>
</template>
<script>
import VueJsonPretty from 'vue-json-pretty';
import 'vue-json-pretty/lib/styles.css';
export default {
components: {
VueJsonPretty,
},
};
</script>
Use Nuxt.js
- In
plugins/vue-json-pretty.js
import Vue from 'vue'
import VueJsonPretty from 'vue-json-pretty'
Vue.component("vue-json-pretty", VueJsonPretty)
css: [
'vue-json-pretty/lib/styles.css'
],
plugins: [
'@/plugins/vue-json-pretty'
],
Props
data(v-model) | JSON data, support v-model when use editable | JSON object | - |
indent | JSON indent | number | 2 |
collapsedNodeLength | Objects or arrays which length is greater than this threshold will be collapsed | number | - |
deep | Paths greater than this depth will be collapsed | number | - |
showLength | Show the length when collapsed | boolean | false |
showLine | Show the line | boolean | true |
showLineNumber | Show the line number | boolean | false |
showIcon | Show the icon | boolean | false |
showDoubleQuotes | Show doublequotes on key | boolean | true |
virtual | Use virtual scroll | boolean | false |
height | The height of list when using virtual | number | 400 |
itemHeight | The height of node when using virtual | number | 20 |
selectedValue(v-model) | Selected data path | string, array | - |
rootPath | Root data path | string | root |
nodeSelectable | Defines whether a node supports selection | (node) => boolean | - |
selectableType | Support path select, default none | multiple | single | - |
showSelectController | Show the select controller | boolean | false |
selectOnClickNode | Trigger select when click node | boolean | true |
highlightSelectedNode | Support highlighting selected nodes | boolean | true |
collapsedOnClickBrackets | Support click brackets to collapse | boolean | true |
renderNodeKey | render node key, or use slot #renderNodeKey | ({ node, defaultKey }) => vNode | - |
renderNodeValue | render node value, or use slot #renderNodeValue | ({ node, defaultValue }) => vNode | - |
renderNodeActions | render node actions, or use slot #renderNodeActions | boolean | ({ node, defaultActions }) => vNode | false |
editable | Support editable | boolean | false |
editableTrigger | Trigger | click | dblclick | click |
theme | Sets the theme of the component. Options are 'light' or 'dark', with dark mode enhancing visibility on dark backgrounds | 'light' | 'dark' | light |
Events
nodeClick | triggers when click node | (node: NodeData) |
nodeMouseover | triggers when mouseover node | (node: NodeData) |
bracketsClick | triggers when click brackets | (collapsed: boolean, node: NodeData) |
iconClick | triggers when click icon | (collapsed: boolean, node: NodeData) |
selectedChange | triggers when the selected value changed | (newVal, oldVal) |
Slots
| Slot Name | Description | Parameters |
| ----------------- | ------------------- | ---------------------------------------------- | ----- |
| renderNodeKey | render node key | { node, defaultKey } |
| renderNodeValue | render node value | { node, defaultValue } |
| renderNodeActions | render node actions | boolean | ({ node, defaultActions }) => vNode | false |
Contributors