kunish/json-viewer

★ 0Forks 0TypeScriptGitHub ↗Compare

README

JSON Viewer

一个功能强大的 JSON 查看器,支持 JSON 数据的可视化展示、导入导出等功能。

功能特性

  • 📝 JSON 数据可视化展示
  • 📂 支持导入本地 JSON 文件
  • 💾 支持导出为 JSON 文件
  • 📄 支持导出为 XML 文件
  • 🎨 美观的用户界面
  • 🔍 支持 JSON 数据的折叠/展开
  • ✨ 支持自定义主题

安装

# 使用 npm
npm install json-viewer

# 使用 yarn
yarn add json-viewer

# 使用 pnpm
pnpm add json-viewer

使用方法

基础用法

import { 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>
  );
}

API 文档

JsonViewer 组件

主要的 JSON 查看器组件。

Props

属性名 类型 必填 默认值 说明
input string 是 - 要显示的 JSON 字符串

JsonViewerConfigProvider 组件

用于配置 JSON 查看器的全局设置。

Props

属性名 类型 必填 默认值 说明
defaultCollapsed boolean 否 false 是否默认折叠所有节点

工具函数

parseJson

解析 JSON 字符串,返回解析结果和错误信息。

const { data, error } = parseJson(jsonString);

downloadAsJson

将 JSON 字符串下载为 JSON 文件。

downloadAsJson(jsonString);

downloadAsXml

将 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!

  1. Fork 本仓库
  2. 创建你的特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交你的更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 开启一个 Pull Request

许可证

MIT License - 详见 LICENSE 文件

Contributors

kunish

Issues