JsonViewer

JSON 预览 / 编辑器:底层直接引 Semi 自研框架无关内核 @douyinfe/semi-json-viewer-core(仿 VS Code text-buffer,虚拟化大数据、jsonc-parser 解析),内核经动态 import 异步加载(不进主 bundle,加载中 loading 态)。非受控(value 仅初始,不回写)。语法高亮全走 token(key/string/number/boolean·null/标点/注释/行号/搜索命中)深浅双主题。搜索/替换工具条由 Svelte 壳自渲染(内核仅提供检索 API),文案/aria 走 i18n。ref 暴露 getValue/format/search/getSearchResults/prevSearch/nextSearch/replace/replaceAll。options 支持 lineHeight/autoWrap/readOnly/customRenderRule(仅只读经 customRender 事件透出)/formatOptions。renderSearchButton 自定义搜索按钮(对齐 Semi ≥2.95)。

设计文档

如何引入

import { JsonViewer } from '@chenzy-design/svelte';

基础用法

value 传入 JSON 字符串,展示与编辑(非受控)。

只读

options.readOnly 开启只读模式。

格式化配置

options.formatOptions 控制缩进与换行。

API 参考

JsonViewer

Props

属性说明类型默认值
value展示内容(JSON 字符串)。非受控:仅初始建实例,后续变化不重建(对齐 Semi)string''
height高度(number 记为 px)number | stringundefined
width宽度(number 记为 px)number | stringundefined
showSearch是否显示搜索入口booleantrue
renderSearchButton自定义渲染搜索按钮(传入默认按钮 snippet 与控制句柄,对齐 Semi ≥2.95)Snippet<[Snippet, SearchControls]>undefined
options编辑器配置:lineHeight(20)/autoWrap(true)/readOnly(false)/customRenderRule/formatOptionsJsonViewerOptionsundefined
onChange内容变化回调(非受控,不回写 value)(value: string) => voidundefined
onCustomRender只读模式命中 customRenderRule 时透出 customRenderMap(map: Map<HTMLElement, unknown>) => voidundefined
class自定义类名stringundefined
style自定义内联样式stringundefined

Events

事件载荷说明
onChange内容变化(非受控,不回写 value)
onCustomRender只读 + customRenderRule 命中,透出 customRenderMap

Methods

属性类型说明
getValue取当前 JSON 字符串
format格式化当前内容
search检索文本
getSearchResults取当前搜索命中列表
prevSearch跳到上一个匹配
nextSearch跳到下一个匹配
replace替换当前命中(只读时忽略)
replaceAll替换全部命中(只读时忽略)

Accessibility

  • 编辑器容器 role=textbox + aria-multiline + aria-label(i18n);只读时 aria-readonly;容器 tabindex=0 可聚焦。搜索/替换工具条按钮均带 aria-label(i18n),选项切换按钮带 aria-pressed。编辑键位由内核处理,不覆盖。

设计变量

变量默认值用法
--cd-color-json-viewer-bg var(--cd-color-fill-0)编辑器容器背景
--cd-color-json-viewer-border var(--cd-color-border)编辑器容器边框色
--cd-color-json-viewer-comment var(--cd-color-text-3)comment-*:JSONC 注释
--cd-color-json-viewer-error var(--cd-color-danger)error:语法错误提示色
--cd-color-json-viewer-key var(--cd-color-primary)string-key:对象键名
--cd-color-json-viewer-keyword var(--cd-color-link)keyword:布尔与 null(内核归一同一 scope)
--cd-color-json-viewer-line-number var(--cd-color-text-3)line-number:行号文字色
--cd-color-json-viewer-line-number-bg var(--cd-color-fill-0)line-number-container:行号列背景
--cd-color-json-viewer-number var(--cd-color-warning)number:数字值
--cd-color-json-viewer-punctuation var(--cd-color-text-2)delimiter-*:括号/逗号/冒号等标点