CSV 与 JSON 转换
把 CSV 转成对象或数组的 JSON 数组,或把 JSON 转回 CSV。自动识别分隔符,可读取使用分号和小数逗号的 Excel 文件。
代码示例
可直接复制到你自己的项目中。每个示例只使用该语言的标准库,因此无需安装任何东西。
const text = 'name,city\nAnn,Utrecht\nBob,"Den Haag, NL"\n'
const trimmed = text.trimEnd()
const records = [[]]
for (const match of trimmed.matchAll(/("(?:[^"]|"")*"|[^,\n]*)(,|\n|$)/gu)) {
if (match.index === trimmed.length) break
const [, field, end] = match
records.at(-1).push(field.startsWith('"') ? field.slice(1, -1).replaceAll('""', '"') : field)
if (end === '\n') records.push([])
}
const [header, ...rows] = records
const objects = rows.map((row) => Object.fromEntries(header.map((name, i) => [name, row[i]])))
console.log(JSON.stringify(objects))功能
把 CSV 转成 JSON 数组,或把 JSON 转回 CSV。按 RFC 4180 读取 CSV:支持带引号的字段、双写的引号以及字段内的换行。
使用方法
- 粘贴 CSV 或 JSON,或拖入文件。
- 选择 CSV 转 JSON 或 JSON 转 CSV。分隔符和小数点可保持 自动识别,也可自行设置。
- 复制或下载结果,或用 将输出作为输入 把它变成下一步的输入。
示例
CSV name;price / cheese;12,50 会变成 [{"name": "cheese", "price": 12.5}],关闭 表头行 后则是 [["name", "price"], ["cheese", 12.5]]。
须知
- 开启表头行时,每一行都会变成以列名为键的对象;字段数不同的行会连同行号一起报告。
- 分隔符根据前几行自动识别:逗号、分号、制表符或竖线。使用分号和小数逗号的 Excel 文件,自动识别 会把 12,50 读成 12.5。
- 只有读回来完全一样的值才会变成数字,所以
007、1.50和很长的数字仍是文本。关闭数字读取可让全部保持为文本。 - JSON 转 CSV 需要对象数组(列为所有键的并集)或数组的数组。嵌套的值会写成 JSON 文本。
CSV 文件是怎么读取的?
遵循 RFC 4180:字段由分隔符隔开,双引号内的字段可以包含分隔符和换行,其中的引号要写两次。分隔符会根据前几行自动识别。
常见问题
为什么数字变成了文本,或相反?
只有读回来完全一样的值才会变成数字,所以 007、1.50 和很长的数字仍是文本。关闭“读取数字和 true/false”可让全部保持为文本。
什么是分号格式的 Excel?
在某些地区设置下,Excel 用分号分隔字段,用逗号作小数点。分隔符或小数点为“自动识别”时,12,50 会被读成 12.5;选择小数逗号后,JSON 转 CSV 会输出分号分隔的文件。
我的数据会被发送出去吗?
不会。转换在浏览器中完成,你粘贴的内容不会发送到我们的服务器。