Skip to content

实现 JSON 转 CSV 工具

分类:developer | 标签:JSON、CSV、转换、表格 将对象数组转换为 CSV 表格,便于导入 Excel 分析

2.1 功能说明

将对象数组转换为 CSV 表格,便于导入 Excel 分析

2.1.1 使用指南

使用指导

将 JSON 数组(对象数组)转换为 CSV 表格,便于导入 Excel 做数据分析。键名自动作为表头。

注意

仅支持"对象数组";嵌套对象会序列化为 JSON 字符串。含逗号/引号的值会自动转义。

2.2 代码实现

2.2.1 组件结构

本工具是一个基于 Vue 3 <script setup> 语法的单文件组件(SFC),统一包裹在 ToolPageShell 组件内,由它提供页面标题、工具 ID、分类与「使用指南」插槽等通用外壳;核心业务逻辑(响应式状态、计算属性、事件处理函数)全部写在 <script setup> 中,输入/输出通过 el-inputel-button 等 Element Plus 组件与用户交互,所有数据均在浏览器本地处理,不会上传服务器。

2.2.2 核心逻辑概览

<script setup> 中定义的主要函数/方法:

  • esc()
  • convert()
  • copyCsv()
  • download()

2.2.3 关键实现代码

以下是该工具的完整 <script setup> 实现(核心代码)。模板(<template>)与样式(<style>)已省略。

vue
import { ref, computed } from 'vue'
import { ElMessage } from 'element-plus'
import ToolPageShell from '@/components/ToolPageShell.vue'

const input = ref('')
const err = ref('')
const csv = ref('')

function esc(v) {
  const s = v === null || v === undefined ? '' : typeof v === 'object' ? JSON.stringify(v) : String(v)
  return /[",\n]/.test(s) ? '"' + s.replace(/"/g, '""') + '"' : s
}

function convert() {
  err.value = ''; csv.value = ''
  if (!input.value.trim()) return
  let data
  try { data = JSON.parse(input.value) } catch (e) { err.value = 'JSON 解析失败:' + e.message; return }
  if (!Array.isArray(data)) { err.value = '顶层必须是数组'; return }
  if (data.length === 0) { err.value = '数组为空'; return }
  const cols = []
  data.forEach((o) => { if (o && typeof o === 'object') Object.keys(o).forEach((k) => { if (!cols.includes(k)) cols.push(k) }) })
  const head = cols.map(esc).join(',')
  const body = data.map((o) => cols.map((c) => esc(o ? o[c] : '')).join(',')).join('\n')
  csv.value = head + '\n' + body
}

const rowCount = computed(() => csv.value ? csv.value.split('\n').length - 1 : 0)
const colCount = computed(() => csv.value ? (csv.value.split('\n')[0] || '').split(',').length : 0)

function copyCsv() { navigator.clipboard?.writeText(csv.value).then(() => ElMessage.success('已复制')) }
function download() {
  const blob = new Blob(['\uFEFF' + csv.value], { type: 'text/csv;charset=utf-8' })
  const a = document.createElement('a')
  a.href = URL.createObjectURL(blob)
  a.download = 'data.csv'
  a.click()
}

2.3 效果截图

JSON 转 CSV 效果截图

工具访问地址:https://www.i91tools.com/tools/json-to-csv