Json字符串的高亮显示 react-jsx

Posted 会潮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Json字符串的高亮显示 react-jsx相关的知识,希望对你有一定的参考价值。

 1 import React from \'react\'
 2 import styles from \'./json.less\'
 3 
 4 const indent = <span>&nbsp;&nbsp;&nbsp;&nbsp;</span>
 5 
 6 const objectToJsonCode = (object = {}, objectKey = null, deepIndent = null, parentIsArray = false, isArray = false) => {
 7   const result = Object.entries(object).map(([key, value], index, data) => {
 8     if (value instanceof Array || value instanceof Object) {
 9       return <>
10         {objectToJsonCode(value, key, <>{deepIndent}{indent}</>, object instanceof Array, value instanceof Array)}
11         {data.length === index + 1 ? null : \',\'}
12         <br/>
13       </>
14     }
15     const type = Object.prototype.toString.call(value)
16     let className = \'string\'
17     switch (type) {
18       case \'[object Boolean]\':
19         className = \'boolean\'
20         break
21       case \'[object String]\':
22         className = \'string\'
23         break
24       case \'[object Number]\':
25         className = \'number\'
26         break
27       default:
28         className = \'string\'
29     }
30     return (<>
31       {deepIndent}{indent}
32       {isArray ? null : <span className={styles.key}>{`"${key}": `}</span>}
33       <span className={styles[className]}>
34         {
35           (() => {
36             let valueString
37             switch (className) {
38               case \'string\':
39                 valueString = `"${value}"`
40                 break
41               case \'boolean\':
42                 valueString = value.toString()
43                 break
44               default:
45                 valueString = value
46             }
47             return valueString
48           })()
49         }
50       </span>
51       {data.length === index + 1 ? <br/> : \',\'}
52       {data.length !== index + 1 ? <br/> : null}
53     </>)
54   })
55 
56   if (object instanceof Array) {
57     return <>
58       {deepIndent}
59       {parentIsArray ? null : <span className={styles.key}>{objectKey === null ? \'\' : `"${objectKey}": `}</span>}
60       {result.length === 0 ?
61         <span>[]</span> :
62         <><span>[</span> <br/> {result} {deepIndent}<span>]</span></>
63       }
64     </>
65   }
66   return <>
67     {deepIndent}
68     {parentIsArray ? null : <span className={styles.key}>{objectKey === null ? \'\' : `"${objectKey}": `}</span>}
69     {result.length === 0 ?
70       <span>{\'{}\'}</span> :
71       <><span>{\'{\'}</span> <br/>{result} {deepIndent}<span>{\'}\'}</span></>
72     }
73   </>
74 }
75 
76 export default objectToJsonCode
1 pre {outline: 1px solid #ccc; padding: 5px; margin: 5px; }
2 .string { color: green; }
3 .number { color: darkorange; }
4 .boolean { color: blue; }
5 .null { color: magenta; }
6 .key { color: red; }

使用:

<pre style={{maxWidth:\'640px\'}}>{objectToJsonCode(jsonString)}</pre>
 
效果图: 

以上是关于Json字符串的高亮显示 react-jsx的主要内容,如果未能解决你的问题,请参考以下文章

vscode Vue文件代码显示不高亮问题

Solr、sunburnt (python) 和高亮显示:操作方法?

从 react-jsx 迁移到 typescript-tsx react

当“jsx”为“react-jsx”时,除非提供“--jsx”标志,否则无法使用 JSX

在 Linux 下用 grep 时高亮显示匹配的部分

react-jsx