工具指南23-CSV转JSON在线工具

CSV 和 JSON 是数据交换的两大主流格式。CSV 适合表格型数据,人类可读,Excel 能直接打开;JSON 则是前后端接口、配置文件、NoSQL 数据库的标准格式。两者互转是日常开发中的高频需求。

本文介绍 anyfreetools.com 的 CSV to JSON 在线转换工具,无需安装任何依赖,打开浏览器即可完成转换。

CSV 和 JSON 的格式差异

CSV(Comma-Separated Values)是一种纯文本格式,用逗号(或其他分隔符)分隔字段,第一行通常是列名(Header):

id,name,age,city
1,Alice,28,Beijing
2,Bob,32,Shanghai
3,Charlie,25,Guangzhou

转换为 JSON 后,每行变成一个对象,列名作为 key:

[
  { "id": "1", "name": "Alice", "age": "28", "city": "Beijing" },
  { "id": "2", "name": "Bob", "age": "32", "city": "Shanghai" },
  { "id": "3", "name": "Charlie", "age": "25", "city": "Guangzhou" }
]

看起来简单,但实际转换中有不少细节需要处理:

  • 数据类型:CSV 中所有值都是字符串,转 JSON 时数字、布尔值是否自动转换?
  • 空值处理:空字段转为 null""、还是直接省略 key?
  • 分隔符:有的 CSV 用制表符(TSV)、分号分隔
  • 引号转义:字段内容包含逗号时,CSV 用引号包裹,解析器需要正确处理
  • 嵌套结构:能否生成嵌套 JSON 而非扁平对象数组?

在线工具封装了这些细节,省去手写解析代码的麻烦。

CSV 格式的技术细节

RFC 4180 标准与引号转义

CSV 没有统一的官方规范,实际使用的标准是 RFC 4180。核心规则是:字段内容包含分隔符时,必须用双引号包裹;字段内容本身含有双引号时,用两个连续双引号转义

name,bio
Alice,"Engineer, Backend"
Bob,"He said ""hello"" to me"

第一行 Alicebio 字段包含逗号,必须加引号;第二行 Bob 的 bio 里有双引号,写成 ""hello"" 才能正确解析。不遵守这个规则的 CSV 在解析时会出现字段错位或内容截断。

编码问题:GBK vs UTF-8

Excel 在中文 Windows 系统上导出的 CSV 默认是 GBK/GB2312 编码,而现代开发环境(Node.js、Python、数据库、API)几乎全部使用 UTF-8。直接把 GBK 文件喂给 UTF-8 解析器,中文字段就会变成乱码。

解决方式有两种:

  1. 在 Excel 中另存为时选择”CSV UTF-8(逗号分隔)“——Excel 会在文件头加一个 BOM(字节顺序标记,\xEF\xBB\xBF),明确标识为 UTF-8 编码
  2. 用代码转换编码,读取时指定 encoding='gbk',写出时指定 encoding='utf-8'

BOM 本身不是内容,但如果解析器不处理 BOM,第一个字段名会多出一个不可见字符,导致按列名取值失败。Python 的 utf-8-sig 编码和 Node.js 的 BOM 剥离都是为了解决这个问题。

换行符差异

CSV 中的换行符在不同操作系统下不一致:

  • Windows:\r\n(CRLF)
  • Unix/Linux/macOS:\n(LF)
  • 旧版 Mac(OS 9 及以前):\r(CR)

Excel 在 Windows 上导出的 CSV 使用 \r\n。大多数解析库能自动处理,但手写正则或 split('\n') 来解析 CSV 时,\r 会残留在字段值末尾,成为难以排查的隐蔽 bug。

工具核心功能

输入方式

支持两种输入方式:

直接粘贴:在输入框中粘贴 CSV 文本,适合快速转换少量数据。

上传文件:点击上传按钮选择本地 .csv 文件,适合处理较大的数据集。

分隔符配置

工具支持自定义列分隔符,常见选项:

分隔符符号典型来源
逗号,标准 CSV,Excel 导出
制表符\tTSV 格式,Excel/数据库导出
分号;欧洲地区 Excel 默认导出
竖线|部分日志、配置文件

遇到分隔符选错导致输出乱套时,切换一下分隔符即可解决。

输出格式

工具提供多种输出格式选项:

数组格式(默认):每行数据转为一个对象,所有对象放入数组,适合大多数接口场景:

[
  { "name": "Alice", "age": 28 },
  { "name": "Bob", "age": 32 }
]

键值对格式:以某列作为 key,其余列作为 value,生成对象而非数组。适合需要按 ID 快速查找的场景:

{
  "1": { "name": "Alice", "age": 28 },
  "2": { "name": "Bob", "age": 32 }
}

嵌套 JSON 结构

标准转换输出的是扁平对象数组。但有时候业务数据本身有层级关系,比如 address.cityaddress.country 应该嵌套在 address 对象下。

支持嵌套的工具约定用点号(.)作为字段名的分隔符:

name,address.city,address.country
Alice,Beijing,CN

转换后自动生成嵌套结构:

[
  {
    "name": "Alice",
    "address": {
      "city": "Beijing",
      "country": "CN"
    }
  }
]

如果不需要嵌套,保持列名扁平即可,工具不会对普通列名做分割处理。

数据类型推断

工具支持自动类型推断选项:

  • 开启:纯数字字段转为 number,true/false 转为 boolean,空值转为 null
  • 关闭:所有字段保持 string 类型(适合需要精确控制类型的场景,比如手机号不能转为 number)

格式化与压缩

输出支持:

  • 美化(Pretty Print):带缩进,便于阅读和调试
  • 压缩(Minified):去掉空格换行,减小体积,适合生产环境

实战案例

案例一:处理 Excel 导出数据

从 Excel 导出 CSV 时,常见问题是编码和分隔符。中文 Windows 的 Excel 默认导出 GBK 编码,且分隔符是逗号。

直接粘贴到工具输入框,选择逗号分隔符,开启类型推断,得到标准 JSON 数组,可直接用于接口请求或数据库导入。

案例二:数据库查询结果转 JSON

数据库工具(Navicat、DBeaver 等)支持将查询结果导出为 CSV。导出后用本工具转为 JSON,再交给前端或导入 MongoDB 等 NoSQL 数据库:

原始 CSV(从 MySQL 导出):

user_id,email,created_at,is_active
101,alice@example.com,2024-01-15 10:30:00,1
102,bob@example.com,2024-02-20 09:00:00,0

转换结果(开启类型推断):

[
  {
    "user_id": 101,
    "email": "alice@example.com",
    "created_at": "2024-01-15 10:30:00",
    "is_active": 1
  },
  {
    "user_id": 102,
    "email": "bob@example.com",
    "created_at": "2024-02-20 09:00:00",
    "is_active": 0
  }
]

注意:is_active 字段值是 1/0,工具会转为 number,如需 boolean 需手动处理。

案例三:制表符分隔的 TSV 文件

部分数据导出格式是 TSV(Tab-Separated Values),文件扩展名可能是 .tsv.txt。将工具的分隔符切换为制表符即可正确解析,例如:

user_id	name	score
1	Alice	95
2	Bob	87

转换结果与逗号分隔的 CSV 完全一致,工具自动按列名生成 JSON 对象数组。

案例四:配置数据批量导入

假设要批量创建配置项,CSV 来自运营同学填写的 Excel 表格:

key,value,description,enabled
max_retry,3,最大重试次数,true
timeout,5000,请求超时(ms),true
debug_mode,false,调试模式,false

开启类型推断后:

[
  { "key": "max_retry", "value": 3, "description": "最大重试次数", "enabled": true },
  { "key": "timeout", "value": 5000, "description": "请求超时(ms)", "enabled": true },
  { "key": "debug_mode", "value": false, "description": "调试模式", "enabled": false }
]

value 字段中的数字被正确识别为 number,enabled 中的 true/false 被转为 boolean。注意 debug_mode 行的 valuefalse 也被推断为 boolean,如果业务上需要保留字符串 "false",需关闭类型推断。确认类型符合预期后,可直接用于后端配置导入接口。

常见问题排查

转换后中文乱码

通常是编码问题。Excel 在 Windows 上默认保存为 GBK 编码,而工具一般按 UTF-8 处理。解决方式:在 Excel 中另存为时选择”CSV UTF-8(逗号分隔)“格式,或通过 Python 脚本转换编码:

import pandas as pd
df = pd.read_csv("data.csv", encoding="gbk")
df.to_csv("data_utf8.csv", encoding="utf-8", index=False)

字段内容包含逗号时解析错误

标准 CSV 会用引号包裹含逗号的字段:

name,address
Alice,"Beijing, Chaoyang"

如果工具解析出错,检查是否正确处理了带引号的字段。正规工具都支持 RFC 4180 标准,通常不会有问题。

数字字段前导零丢失

开启类型推断时,"0086" 会被转为数字 86,导致前导零丢失。手机号、邮编、身份证号等字段需要关闭类型推断,或在 CSV 中将这类字段加引号包裹。

输出数组为空

检查 CSV 是否有 Header 行。工具默认将第一行作为列名,如果 CSV 没有 Header,需要手动添加或在工具中关闭”首行为列名”选项。

用代码实现 CSV 转 JSON

如果 CSV 转 JSON 是业务流程的固定环节(定时任务、自动化导入、CI 脚本),在线工具显然不合适,还是要用代码。以下是两种常见语言的实现。

Node.js:用 csv-parse 库

csv-parse 是 Node.js 生态里最成熟的 CSV 解析库,处理引号转义、换行符、BOM 都很稳健:

const { parse } = require('csv-parse/sync');
const fs = require('fs');

const input = fs.readFileSync('data.csv', 'utf-8');
const records = parse(input, {
  columns: true,        // 第一行作为 key
  skip_empty_lines: true,
  cast: true,           // 自动类型推断
});
console.log(JSON.stringify(records, null, 2));

cast: true 开启类型推断,数字字段自动转为 number,true/false 转为 boolean。如果需要处理 Excel 导出的带 BOM 的 UTF-8 文件,读取前用 input.replace(/^\uFEFF/, '') 剥离 BOM 即可。

Python:用标准库 csv 模块

Python 标准库自带 csv 模块,不需要额外安装依赖:

import csv, json

with open('data.csv', encoding='utf-8-sig') as f:  # utf-8-sig 处理 BOM
    reader = csv.DictReader(f)
    data = list(reader)

print(json.dumps(data, ensure_ascii=False, indent=2))

encoding='utf-8-sig' 会自动剥离文件开头的 BOM 字符,解决 Excel 导出文件首列列名带不可见字符的问题。ensure_ascii=False 保证中文字段直接输出而不是转义为 \uXXXX

注意:csv.DictReader 读出的所有字段都是字符串,如需类型推断,需要自己遍历转换,或改用 pandasread_csv 并配合 to_json

在线工具 vs 代码方案

场景推荐方式
一次性数据转换在线工具
非技术同学自助操作在线工具
快速验证 CSV 格式在线工具
定时任务、自动化流程代码
转换逻辑需要版本控制代码
数据量超大(几十 MB 以上)代码(流式处理)

典型使用场景

数据分析前的格式预处理

产品或运营同学从 Excel 整理好数据,导出 CSV 后需要喂给后端 API 或分析脚本。直接用在线工具转成 JSON 数组,复制粘贴到 Postman 或脚本的测试数据里,比手写 JSON 快得多,也不容易出格式错误。

前端 mock 数据准备

测试数据通常在 Excel 表格里维护,QA 或开发填完数据后,需要转成 JavaScript 对象用于前端 mock。把 CSV 粘贴进工具,输出的 JSON 数组直接赋值给变量,格式完全符合前端预期,省去手动添加引号和括号的工作。

数据库导出结果供前端消费

Navicat、DBeaver、TablePlus 等数据库工具导出的 CSV 是最通用的中间格式。导出后通过本工具转为 JSON,可以直接导入 MongoDB、作为接口响应的测试数据,或用于生成初始化 seed 数据文件。开启类型推断后,数字和布尔字段会自动还原为正确类型,不需要再手动修正。

总结

CSV to JSON 在线转换工具 覆盖了日常数据转换的主要场景:

  • 零配置快速转换:粘贴 CSV,一键得到 JSON
  • 灵活的分隔符支持:兼容逗号、制表符、分号等格式
  • 类型推断:数字、布尔值自动识别,减少后处理工作量
  • 多种输出格式:数组、键值对、美化/压缩任意切换

下次遇到需要将 Excel 数据或数据库导出结果转为 JSON 的场景,直接打开 anyfreetools.com 就能搞定。