一个功能强大的 JSON 查看器,支持 JSON 数据的可视化展示、导入导出等功能。
- 📝 JSON 数据可视化展示
- 📂 支持导入本地 JSON 文件
- 💾 支持导出为 JSON 文件
- 📄 支持导出为 XML 文件
- 🎨 美观的用户界面
- 🔍 支持 JSON 数据的折叠/展开
- ✨ 支持自定义主题
# 使用 npm
npm install json-viewer
# 使用 yarn
yarn add json-viewer
# 使用 pnpm
pnpm add json-viewerimport { JsonViewer } from "json-viewer";
import "json-viewer/theme.scss";
function App() {
const jsonData = {
name: "示例数据",
items: [1, 2, 3],
};
return <JsonViewer input={JSON.stringify(jsonData)} />;
}import { JsonViewer, JsonViewerConfigProvider } from "json-viewer";
import "json-viewer/theme.scss";
function App() {
const jsonData = {
name: "示例数据",
items: [1, 2, 3],
};
return (
<JsonViewerConfigProvider
value={{
defaultCollapsed: true, // 默认折叠所有节点
// 其他配置项...
}}
>
<JsonViewer input={JSON.stringify(jsonData)} />
</JsonViewerConfigProvider>
);
}import { JsonViewer } from "json-viewer";
import { downloadAsJson, downloadAsXml, parseJson } from "json-viewer/utils";
import "json-viewer/theme.scss";
function App() {
const [input, setInput] = useState("");
// 处理文件导入
const handleFileImport = (event: React.ChangeEvent<HTMLInputElement>) => {
const file = event.target.files?.[0];
if (!file) return;
const reader = new FileReader();
reader.onload = (e) => {
const content = e.target?.result as string;
const { error } = parseJson(content);
if (error) return;
setInput(content);
};
reader.readAsText(file);
};
return (
<div>
{/* 导入按钮 */}
<label>
<span>导入 JSON</span>
<input
type="file"
accept=".json"
onChange={handleFileImport}
className="hidden"
/>
</label>
{/* 导出按钮 */}
<button onClick={() => downloadAsJson(input)}>下载为 JSON</button>
<button onClick={() => downloadAsXml(input)}>下载为 XML</button>
{/* JSON 查看器 */}
<JsonViewer input={input} />
</div>
);
}主要的 JSON 查看器组件。
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| input | string | 是 | - | 要显示的 JSON 字符串 |
用于配置 JSON 查看器的全局设置。
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| defaultCollapsed | boolean | 否 | false | 是否默认折叠所有节点 |
解析 JSON 字符串,返回解析结果和错误信息。
const { data, error } = parseJson(jsonString);将 JSON 字符串下载为 JSON 文件。
downloadAsJson(jsonString);将 JSON 字符串下载为 XML 文件。
downloadAsXml(jsonString);可以通过修改 CSS 变量来自定义主题:
// 在你的 CSS 文件中覆盖默认变量
:root {
/* 基础尺寸 */
--json-viewer__font-size: 0.8rem;
--json-viewer__border-radius: 0.4rem;
--json-viewer__indent: 0.8rem;
--json-viewer__spacing-xs: 0.4rem;
--json-viewer__spacing-sm: 0.8rem;
--json-viewer__spacing-md: 1.2rem;
--json-viewer__spacing-lg: 1.6rem;
/* 颜色系统 */
--json-viewer__background: #000000;
--json-viewer__foreground: #d4d4d4;
--json-viewer__border-color: #d4d4d4;
--json-viewer__hover-background: rgba(255, 255, 255, 0.1);
--json-viewer__error-foreground: #c24038;
/* 边框样式 */
--json-viewer__border-width: 1px;
--json-viewer__border-style: solid;
--json-viewer__border: var(--json-viewer__border-width) var(
--json-viewer__border-style
)
var(--json-viewer__border-color);
/* 头部样式 */
--json-viewer__header-font-weight: 600;
--json-viewer__header-color: var(--json-viewer__foreground);
--json-viewer__header-hover-background: var(--json-viewer__hover-background);
/* 语法高亮 */
--json-viewer__syntax-foreground-null: #d19a66;
--json-viewer__syntax-foreground-boolean: #d19a66;
--json-viewer__syntax-foreground-number: #d19a66;
--json-viewer__syntax-foreground-string: #89ca78;
--json-viewer__syntax-foreground-key: #ef596f;
--json-viewer__syntax-colon: #d4d4d4;
/* 数组/对象项样式 */
--json-viewer__item-background: transparent;
--json-viewer__item-hover-background: var(--json-viewer__hover-background);
--json-viewer__item-padding: var(--json-viewer__spacing-sm);
--json-viewer__item-gap: var(--json-viewer__spacing-sm);
/* 动画和过渡 */
--json-viewer__transition-duration: 150ms;
--json-viewer__transition-timing: ease-in;
--json-viewer__collapse-transition-duration: 300ms;
}- Chrome (最新版)
- Firefox (最新版)
- Safari (最新版)
- Edge (最新版)
欢迎提交 Issue 和 Pull Request!
- Fork 本仓库
- 创建你的特性分支 (
git checkout -b feature/AmazingFeature) - 提交你的更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启一个 Pull Request
MIT License - 详见 LICENSE 文件