把后端返回的json数据格式化显示在页面上,类似json.cn

今天老大提了一个需求,想要做一个按钮点击后出现一个类似于json.cn代码格式化,把后端返回给你的一个json数据格式化以后显示在页面上,经高人指点知道了这样一个jsoneditor模块

一.介绍

JSON编辑器是基于Web的工具,用于查看,编辑,格式化和验证JSON。 它具有多种模式,例如树编辑器,代码编辑器和纯文本编辑器。

该编辑器可以用作您自己的Web应用程序中的组件。 该库可以作为CommonJS模块,AMD模块或常规javascript文件加载。

支持的浏览器:Chrome,Firefox,Safari,Opera,Edge,Internet Explorer 11。

二.安装

npm install jsoneditor

可以npm安装,也可以直接引用cdn,或者下载下来再引用。

// 为了在我们的web应用中实现JSONEditor,我们需要载入css和js文件
<link href="https://cdn.bootcss.com/jsoneditor/5.13.1/jsoneditor.min.css" rel="stylesheet">
<script src="https://cdn.bootcss.com/jsoneditor/5.13.1/jsoneditor.min.js"></script>

// 获取更多详细的错误信息
<script src="https://cdn.bootcss.com/ace/1.2.9/ace.js"></script>

//上面提到支持多种modes,而其中的code mode比较特别,需要依赖于Ace editor, JSON Editor comes with a custom built version of Ace containing the ace modules ace.js, ext-searchbox.js, mode-json.js, theme-textmate.js, and a custom theme theme-jsoneditor.js。除了载入ace.js之外,我们还需要在js代码中设置mode,就像下面给出的实例中所示。
<script src="https://cdn.bootcss.com/jsonlint/1.6.0/jsonlint.min.js"></script>

三.react里使用

import React, { Component } from 'react';
import JSONEditor from 'jsoneditor';
import 'jsoneditor/dist/jsoneditor.min.css'
import 'jsoneditor/dist/jsoneditor.min.js'

export default class TopicCards extends Component {
    constructor(props) {
        super(props);
        this.json_Editor = React.createRef();
        this.state = {}
    }
    // Json编辑器
    jsonEditor = (e) => {
        console.log(e)
        // create the editor
        const container = this.json_Editor.current;
        container.innerHTML=""
        const jsonOptions  = {
            mode: 'tree',
            modes: ['code', 'form', 'text', 'tree', 'view'],
            onError: function(err) {
                alert(err.toString());
            }
        }
        const editor = new JSONEditor(container, jsonOptions)

        // set json
        const initialJson = {
            "Array": [1, 2, 3],
            "Boolean": true,
            "Null": null,
            "Number": 123,
            "Object": {"a": "b", "c": "d"},
            "String": "Hello World"
        }
        editor.set(initialJson)

        // get json
        // eslint-disable-next-line no-unused-vars
        const updatedJson = editor.get()
    }
    render () {
        return (
            <div className="container">
            	<button  onClick={() => this.jsonEditor()}>查看</button>
                <div id="jsonEditor" ref={this.json_Editor}>
                </div>
            </div>
        )


    }
}