CSV 转 JSON
或者粘贴字幕文本
这次转换会改变什么
这个方向不会丢失内容 —— 源格式的每一项特性在目标格式里都有地方可去。
这份清单来自这两种格式的能力矩阵,而不是你加载的这份具体文件。如果具体文件用到了格式允许、但矩阵没有建模的特性,可能会丢得更多。
这一页把 CSV 表格转成 JSON。输入一张表,输出一份结构化的字幕数据,正文与时间轴都在;转换在浏览器里完成,不上传。
这个方向不丢东西。CSV 能表达的每一件事 JSON 都有对应:时间轴、硬换行、文字。产物是一个对象,version 为 1,cues 数组里每条有 start、end(整数毫秒)和 lines;CSV 带 id 列时,那个 id 也会保留下来。
4.126 秒在 CSV 里写成 00:00:04.126,在 JSON 里是 4126,两者之间不四舍五入也不平移。原来显示 2.9 秒的字幕仍然是 2.9 秒,一条两行的字幕仍然是同一个 cue 里的两个元素。
CSV 的列按表头识别:start、end、text 可以写成 begin、finish、content 之类的别名,没有表头时按前三列顺序读;时间码里没加引号的逗号把一行拆成两列时,转换器会把两半拼回同一个时间码。
产物按起始时间升序,UTF-8、Unix 换行、无 BOM。整季可以一次拖入,串行处理,最后打包成一个 ZIP 下载。
示例
一份典型的 CSV 文件转成 JSON
输入
start,end,text
00:00:01.000,00:00:03.500,The quick brown fox.
00:00:04.000,00:00:06.250,"Jumps over, the lazy dog."
00:00:07.000,00:00:09.000,"Two lines here.
And a second one."
输出
{
"version": 1,
"cues": [
{
"start": 1000,
"end": 3500,
"lines": [
"The quick brown fox."
]
},
{
"start": 4000,
"end": 6250,
"lines": [
"Jumps over, the lazy dog."
]
},
{
"start": 7000,
"end": 9000,
"lines": [
"Two lines here.",
"And a second one."
]
}
]
}
这一方向不丢东西:左右两栏可以逐行对照。
同一转换遇到一份脏文件
输入
id,start,end,note,text
1,00:00:01,000,00:00:04,000,cue one,"Hello there, friend."
2,00:00:05.000,00:00:07.000,cue two,Second line.
bad,notatime,00:00:09.000,cue three,Unreadable start.
4,00:00:10.000,00:00:09.000,cue four,End before start.
5,00:00:12.000,00:00:14.000,cue five,Unquoted comma in text, right here.
输出
{
"version": 1,
"cues": [
{
"id": "1",
"start": 1000,
"end": 4000,
"lines": [
"Hello there, friend."
]
},
{
"id": "2",
"start": 5000,
"end": 7000,
"lines": [
"Second line."
]
},
{
"id": "4",
"start": 10000,
"end": 10001,
"lines": [
"End before start."
]
},
{
"id": "5",
"start": 12000,
"end": 14000,
"lines": [
"Unquoted comma in text, right here."
]
}
]
}
真实文件里常见的损坏:混合换行、散落的空白、留空的字段。可以对照上面那份干净样例,看看解析器能容忍到什么程度。
常见问题
CSV 转 JSON 的产物是什么结构?
一个对象:version 为 1,cues 是数组,每条有 start 与 end(整数毫秒)和一个 lines 数组;CSV 有 id 列时每条还会带 id。外层没有转义过的字幕文本,正文就在 lines 里。
CSV 转 JSON 会丢时间精度吗?
不会。CSV 的 00:00:04.126 在 JSON 里就是 4126,两边都到毫秒;不四舍五入、不平移,2.9 秒的字幕仍然是 2.9 秒。
CSV 转 JSON 后,一条两行字幕怎么放?
放在同一个 cue 的 lines 数组里,两个元素。它们仍然属于同一条字幕,播放器会一起显示。
CSV 转 JSON 后,字幕顺序会变吗?
会按起始时间排一次,最早的在前。播放器和后续工具都按这个顺序读;CSV 原本乱序时,产物会被整理成升序,这是有意的结构整理。
CSV 转 JSON 之后,再转回 CSV 会丢什么?
会丢样式、屏幕定位与卡拉OK 计时,因为 CSV 没有地方放它们。CSV 转 JSON 这一趟本身不丢东西,代价要到回程才出现。
CSV 转 JSON 后,输入编码还看得出来吗?
产物固定是 UTF-8、Unix 换行、无 BOM。输入若是 UTF-16 或 Windows 单字节编码,会先解码再转换,结果面板会说明这次发生过解码。