免费工具 JSON 转 CSV,也能 CSV 转回 JSON
把接口返回的 JSON、导出的 JSON Lines 或者 Excel 表格粘进来:嵌套对象展开成「props.amount」这样的列名,引号和换行按 RFC 4180 处理;哪一行坏了,直接告诉你第几行。下载时勾上 BOM,中文 Excel 双击打开也不乱码。
- 双向互转
- Excel 打开不乱码
- 本地转换
JSON 和 CSV 互转
示例是 3 条 JSON Lines 格式的事件,TapCub 数据导出就是这个格式。点「互换方向」可以把结果转回去;也可以打开本机文件,或粘贴你自己的数据。
JSON:对象数组、单个对象,或 JSON Lines(每行一个对象)。CSV:逗号、制表符、分号或竖线分隔。
行数
3
数据行,不算表头。
列数
15
展开嵌套之后,或按表头。
大小(字节)
452
结果的 UTF-8 字节数,加了 BOM 时含 BOM。
检查结果
- 提示按 JSON Lines 读取:3 条记录,每行一条。
- 提示3 行缺少部分列,这些单元格留空。
- 警告props.order_id 列有长数字:Excel 只保留 15 位有效数字,11 位以上默认显示成科学计数法(如 2.03E+15),订单号、手机号、身份证号会变样。用「数据 → 从文本/CSV」导入并把这列设为文本。
ts,type,name,path,utm_source,utm_medium,country,device_type,props.order_id,props.amount,props.currency,props.items,props.plan,props.coupon,props
2026-11-11T00:03:21.512Z,event,order_paid,/活动/双11,weixin,social,CN,mobile,2026111100018842,299,CNY,"[{""sku"":""PRO-12"",""qty"":1}]",,,
2026-11-11T00:05:02.004Z,event,signup,/pricing,baidu,cpc,CN,desktop,,,,,pro,满300减30,
2026-11-11T00:07:45.230Z,pageview,,/blog/utm-guide,,,SG,mobile,,,,,,,表格预览
前 20 行;值太长时只在这里截短。
| ts | type | name | path | utm_source | utm_medium | country | device_type | props.order_id | props.amount | props.currency | props.items | props.plan | props.coupon | props |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2026-11-11T00:03:21.512Z | event | order_paid | /活动/双11 | weixin | social | CN | mobile | 2026111100018842 | 299 | CNY | [{"sku":"PRO-12","qty":1}] | — | — | — |
| 2026-11-11T00:05:02.004Z | event | signup | /pricing | baidu | cpc | CN | desktop | — | — | — | — | pro | 满300减30 | — |
| 2026-11-11T00:07:45.230Z | pageview | — | /blog/utm-guide | — | — | SG | mobile | — | — | — | — | — | — | — |
版本 v1.0更新于 更新记录
转换器告诉你什么
除了转换结果,还有三个计数、一份带行号的检查结果,以及前 20 行的表格预览。
行数和列数
示例里 3 条事件转成 3 行、15 列。列是所有记录里全部键的并集,所以只有下单事件有 props.order_id,这一列也会建出来,其它行留空。
行号
CSV 的问题指向你输入里的物理行,不是第几条记录。带引号的字段可以跨行(如示例里的「多行备注」),所以第 3 条记录可能从第 5 行开始。JSON Lines 的错误指向出错的那一行。
提示和警告的区别
「提示」是转换器替你做的决定,比如识别出的分隔符、某列保留为文字;「警告」是输入不合规范,比如某行字段数不对,结果可能和你想的不一样。
订单号那条警告
示例的订单号是 16 位数字。转成 CSV 本身没问题,但 Excel 双击打开会显示成科学计数法,16 位以后变成 0。这是 Excel 的限制,不是文件坏了。
CSV 本身没有类型,所有值都是文字,靠打开它的程序去猜。「转换数字」用的是保守规则:只认普通十进制数,前导 0 和超长整数整列保留文字。需要一字不差时把它关掉。
三步
不用安装,也不用点「转换」按钮。
-
1
粘贴或打开文件
粘贴 JSON / CSV,或者打开
.json、.jsonl、.csv、.tsv文件。文件在浏览器里读,自动识别 UTF-8、UTF-16 和 GBK(GB18030)编码。 -
2
选方向和选项
JSON → CSV:选数组怎么写、用什么分隔符,给 Excel 用就勾上 BOM。CSV → JSON:选要不要转换类型、要不要把点号列名还原成嵌套对象。
-
3
看检查结果,再复制或下载
先看检查结果,有错误就到对应行改。然后复制、下载,或者点「互换方向」转回去核对。
CSV 和 JSON 怎么对应
CSV 的写法见 RFC 4180(2005 年的一份说明性规范)。各家表格软件和程序库在细节上不一致,所以这里读的时候宽松、写的时候严格。
- 输出用 CRLF 换行;字段含分隔符、引号或换行时才加引号
- 引号字段里的引号写两次:
"王五 ""小王""" - 嵌套对象用点号连接列名;反过来按同样的规则还原
- 列按第一次出现的顺序排,第一条记录决定列的顺序
| JSON | CSV 单元格 | 转回 JSON(转换类型时) |
|---|---|---|
"2026111100018842" | 2026111100018842 | 2026111100018842(数字;在安全整数范围内) |
299 | 299 | 299 |
"010010" | 010010 | "010010"(前导 0,整列保留文字) |
true | true | true |
null | 空 | null |
{"plan": "pro"} | 列 props.plan = pro | {"props": {"plan": "pro"}}(还原点号列名时) |
[{"sku": "PRO-12"}] | "[{""sku"":""PRO-12""}]" | 还是那个数组(解析单元格 JSON 时) |
3 条事件变成一张表
用默认选项转换示例里的 JSON Lines,每个嵌套的键单独成一列。
| 列名 | 下单 order_paid | 注册 signup | 浏览 pageview |
|---|---|---|---|
| name | order_paid | signup | (空) |
| utm_source | weixin | baidu | (空) |
| props | — | — | (空:props 是 null) |
| props.order_id | 2026111100018842 | — | — |
| props.amount | 299 | — | — |
| props.items | [{"sku":"PRO-12","qty":1}] | — | — |
| props.plan | — | pro | — |
| props.coupon | — | 满300减30 | — |
「—」表示这条记录里没有这个键,「(空)」表示有这个键但值是 null。两者在 CSV 里都是空单元格,CSV 分不出来;如果这个区别重要,就保留 JSON。
转出来的文件为什么看着不对
多数「CSV 坏了」其实是打开它的程序的问题。
Excel 打开中文乱码
文件是 UTF-8,Excel 却按 GBK 打开。下载时勾上 BOM,或者用「数据 → 从文本/CSV」导入并选 UTF-8。
订单号变成 2.03E+15
Excel 只有 15 位有效数字,18 位身份证号末 3 位会变成 0,保存后改不回来;长订单号、64 位 ID 也一样。这些列按文本导入。
所有内容挤在一列
分隔符和软件期望的不一致:欧洲地区的 Excel 默认用分号。选对分隔符,或者在第一行加 sep=,。
把逗号当成中文逗号
CSV 只认半角逗号 , 作分隔符;中文逗号「,」是普通文字,不用加引号,也不会分列。
事件数据可以按 JSON Lines 或 CSV 导出
事件从网页脚本、各平台 SDK 和服务端 API 进入 TapCub,各带自己的属性。需要在别的工具里用原始数据时,用数据导出和开放 API 拿回来。
JSON 怎么转成 CSV?
粘贴 JSON,方向保持「JSON → CSV」,复制或下载结果。对象数组里每个对象一行、每个键一列;嵌套对象展开成 props.amount 这样的点号列名;数组默认整个写成 JSON 放在一格,也可以选「每一项一列」。
CSV 怎么转 JSON?
方向切到「CSV → JSON」再粘贴。分隔符自动识别,第一行作为键名。勾选「转换数字」得到数字和布尔值而不是字符串,勾选「点号列名还原」可以把 user.id 还原成嵌套对象。
CSV 用 Excel 打开中文乱码怎么解决?
原因是 Excel 按 GBK 打开了 UTF-8 文件。下载时勾上「加 BOM」,或者在 Excel 里用「数据 → 从文本/CSV」导入并选择 UTF-8。反过来,GBK 编码的 CSV 用「打开文件」读进来会自动转换。
能转换 JSON Lines(NDJSON)吗?
能。输入不是一个完整 JSON、但每一行都是 JSON 时,按 JSON Lines 读取。TapCub 数据导出、很多日志系统都用这个格式。解析失败的行会按行号列出并跳过。
嵌套对象和数组会怎么处理?
对象展开:{"user": {"id": 7}} 变成 user.id 列。数组有三种写法:整个数组写成 JSON 放一格;每一项一列(items.0.sku、items.1.sku);简单值用分号连接。
为什么 010010、长订单号转回 JSON 还是字符串?
因为转成数字会改变它:010010 会变成 10010,超过 9,007,199,254,740,991 的整数 JavaScript 存不精确。一列里只要出现这种值,整列保留文字,避免同一列里数字和字符串混着。
文件大小有限制吗?
打开文件最多 10 MB;粘贴没有固定上限,但内容太大时页面会变慢。预览只显示前 20 行,输出里始终是全部行。
数据会上传吗?
不会。解析和转换都在你的浏览器里完成,文件在本地读取;这个工具也没有分享链接,粘贴的内容不会出现在网址里。