Oh MyUtils

JSON转CSV转换器 - JSON数组转CSV 在线

在JSON数组和CSV/TSV格式间转换。支持嵌套对象展平、表格数据预览和自定义分隔符。

方向
分隔符
数组
输出
输入
CSV/TSV 结果
 

常见问题

什么是JSON to CSV转换器?

JSON to CSV转换器是一种将JSON(JavaScript Object Notation)数据转换为CSV(逗号分隔值)或TSV(制表符分隔值)表格格式的工具,反之亦然。JSON以嵌套对象和数组的形式存储数据,而CSV以分隔符分隔的行和列表示数据。开发人员和数据分析师在将API响应导出到电子表格、将CSV数据导入基于JSON的应用程序或在系统之间迁移数据时,经常需要在这些格式之间进行转换。

如何使用这个JSON to CSV转换器?

1. 使用选项卡选择转换方向:JSON to CSV或CSV to JSON。2. 在输入区域粘贴数据或上传文件。3. 转换会实时自动进行。4. JSON to CSV:选择分隔符和选项。5. CSV to JSON:分隔符自动检测。6. 在输出面板和预览表中查看结果。7. 复制或下载结果。

我的数据安全吗?会发送到服务器吗?

您的数据100%安全,永远不会离开您的浏览器。此转换器完全在客户端JavaScript中运行。没有数据被传输到任何服务器,存储在任何数据库中,或记录在任何地方。

转换器如何处理嵌套的JSON对象?

嵌套的JSON对象使用点表示法列标题进行扁平化。例如,{"user": {"name": "Alice", "address": {"city": "Seoul"}}}会生成名为user.name和user.address.city的列。对象中的数组可以通过两种方式处理:字符串化模式将数组转换为单元格中的JSON字符串,展开模式为每个数组元素创建单独的行。

此工具生成什么CSV/TSV格式?

此工具生成符合RFC 4180的CSV输出。包含分隔符、双引号或换行符的字段会自动用双引号括起来。字段值中的双引号通过加倍进行转义。第一行默认包含列标题。

如果我的JSON数据不是数组怎么办?

此转换器期望JSON对象数组作为输入。如果输入是单个JSON对象,转换器会自动将其包装成单元素数组进行转换。

如何将CSV转换回具有嵌套对象的JSON?

将CSV转换为JSON时,转换器默认生成扁平的JSON对象数组。支持类型推断:数字字符串变为数字,true/false变为布尔值,null变为null。如果需要所有值都保持为字符串,请禁用自动检测类型选项。

代码示例

// JSON Array to CSV Converter (Client-side, no dependencies)

function flattenObject(obj, prefix = "") {
  const result = {};
  for (const [key, value] of Object.entries(obj)) {
    const fullKey = prefix ? `${prefix}.${key}` : key;
    if (value !== null && typeof value === "object" && !Array.isArray(value)) {
      Object.assign(result, flattenObject(value, fullKey));
    } else {
      result[fullKey] = value;
    }
  }
  return result;
}

function escapeField(value, delimiter = ",") {
  if (value === null || value === undefined) return "";
  const str = typeof value === "object" ? JSON.stringify(value) : String(value);
  if (str.includes(delimiter) || str.includes('"') || str.includes("\n")) {
    return `"${str.replace(/"/g, '""')}"`;
  }
  return str;
}

function jsonToCsv(jsonArray, options = {}) {
  const { delimiter = ",", includeHeader = true, flatten = true } = options;
  const rows = flatten ? jsonArray.map(item => flattenObject(item)) : jsonArray;
  const headerSet = new Set();
  rows.forEach(row => Object.keys(row).forEach(key => headerSet.add(key)));
  const headers = Array.from(headerSet);
  const lines = [];
  if (includeHeader) {
    lines.push(headers.map(h => escapeField(h, delimiter)).join(delimiter));
  }
  for (const row of rows) {
    lines.push(headers.map(h => escapeField(row[h], delimiter)).join(delimiter));
  }
  return lines.join("\n");
}

// Example usage
const data = [
  { name: "Alice", age: 30, address: { city: "Seoul" } },
  { name: "Bob", age: 25, address: { city: "Tokyo" } }
];
console.log(jsonToCsv(data));
// name,age,address.city
// Alice,30,Seoul
// Bob,25,Tokyo

相关工具