JSON转CSV转换器 - JSON数组转CSV 在线
在JSON数组和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