Plus 组件 · JsonViewer
Json编辑器
用于展示和编辑 JSON 数据

使用场景

JsonViewer 组件可用于 JSON 数据的展示与编辑。 Semi 重点参考了 VS Code的 text-buffer 数据结构设计思路,复用了部分 utils与数据类型定义(Token解析,语言服务等),结合我们的功能/样式定制需求,实现了 JsonViewer 组件, 视觉上会与 Semi Design 体系内的其他组件更协调,对于特定数据类型的定制化渲染定制会更方便。
相比于直接使用 MonacoEditor,Semi JsonViewer 在工程化构建上做了额外处理,使用更为简单,无需关注 Webpack插件、worker loader等复杂的配置。
同时由于我们仅关注 Json 数据格式,更轻量化,在开箱即用的同时,拥有更小的体积(📦 -96%) ,更极致的加载速度(🚀 -53.5%) ,更少的内存占用(⬇️ 71.6%)
对于五百万行及以下的数据,均可以做到1s内完成数据加载与解析。 详细的对比数据可查阅 Performance 章节
  • 如果你仅需要对 Json 做预览/编辑,无需对更复杂的其他编程语言作修改,我们建议你选用 JsonViewer
  • 如果你还需要处理其他格式的数据/代码文件,完整的代码编辑器能力(语法高亮、代码不全、错误提示、复杂编辑等)是刚需,构建产物体积不是关注重点,我们建议你选用 Monaco Editor

代码演示

如何引入

JsonViewer 从 v2.71.0 开始支持

基本用法

JsonViewer 的基本用法。传入 height 和 width 参数,设置组件的高度和宽度和初始值。通过 value 传入 Json 字符串

设置行高

配置 options 的 lineHeight 参数,设置固定行高(单位:px, 默认 18)。

自动换行

配置 options 的 autoWrap 参数,设置为 true 时,组件会根据内容长度自动换行。

格式化配置

配置 options 的 formatOptions 参数,设置组件的格式化配置。
  • tabSize: number,设置缩进大小为4,表示每级缩进 4 个空格
  • insertSpaces: boolean,true 表示使用空格进行缩进,false 表示使用制表符(Tab)
  • eol: string,设置换行符,可以是\n,\r\n,

API 参考

JsonViewer

属性说明类型默认值
value展示内容string-
height高度number-
width宽度number-
className类名string-
style内联样式object-
options格式化配置JsonViewerOptions-
onChange内容变化回调(value: string) => void-

JsonViewerOptions

属性说明类型默认值
lineHeight行高number20
autoWrap是否自动换行booleantrue
formatOptions格式化配置FormattingOptions-

FormattingOptions

属性说明类型默认值
tabSize缩进大小number4
insertSpaces是否使用空格进行缩进booleantrue
eol换行符string'\n'

Methods

绑定在组件实例上的方法,可以通过 ref 调用实现某些特殊交互
名称描述
getValue()获取当前值
format()格式化

Performance

Bundle Size

组件体积体积(Gzip)
JsonViewer203.14kb51.23kb
MonacoEditor5102.0 KB1322.7 KB

渲染不同量级数据耗时

注:
  • 测试数据生成方式详情可查阅 url
  • 当数据量级超出50w行时,ReactMonacoEditor 默认关闭高亮等行为,数据对比不遵循单一变量原则
组件1k行5k行1w行10w行50w行100w行300w行
JsonViewer30.42ms30.66ms36.87ms52.73ms111.02ms178.81ms506.25ms
ReactMonacoEditor72.01ms73.76ms76.64ms97.89ms133.31ms202.79ms495.53ms
性能提升57.70%58.41%51.87%46.11%---