Pack Camo

Data Studio

在 JSON、YAML、TOML、CSV 和 Markdown 之间转换结构化文本。 所有处理都在本地完成,不会上传任何内容。

输入
JSON · JSONL · YAML · TOML · CSV · TSV · Markdown
输出
JSON · JSONL · YAML · TOML · CSV · TSV · HTML

源文档

JSON · 320 B

结果

YAML

一棵树,六种格式

每一次转换都会先把源文档解析成一棵统一的类型化树,再把这棵树按目标格式写出来。正因如此,往返转换才靠得住:数字仍是数字,嵌套结构得以保留,对象的键保持书写时的顺序,而不会被悄悄按字母排序。这也是为什么新增一种格式只需要一个解析器加一个序列化器,而不是为每一对格式组合都写一套特例。

各种格式的长处

JSON
默认的数据交换格式。完整保留嵌套结构和类型。
YAML
适合配置文件,也支持注释,但注释不会随转换保留。
TOML
根节点必须是表。null 会被丢弃——TOML 没有这种值。
CSV
可直接用于电子表格。需要对象数组;嵌套的值会变成 JSON 单元格。
TSV
以制表符分隔的 CSV。数据里逗号很多时更稳妥。
JSONL
每行一个文档。日志流水线和 LLM 数据集使用的格式。

那些棘手的边缘情况,我们是有意这样处理的

  • CSV 没有类型。 只有当把某个数字打印回去能与原文完全一致时,单元格才会被当作数字,因此 007 保持为字符串,而 12 则变成数字。
  • CSV 没有嵌套。 从嵌套数据写出表格时,嵌套的值会以 JSON 的形式留在单元格里,而不是发明一套之后还得由你自己反解的扁平化规则。
  • TOML 没有 null。 值为 null 的键会被丢弃,而不是让整个文档转换失败;根节点不是对象的源文档会被直接拒绝——TOML 的根必须是一个表。
  • 注释不是数据。 YAML 和 TOML 的注释存在于树之外,因此无法在转换中保留。没有任何办法能把它们带过去。

常见问题

如何把 JSON 转成 YAML,或把 YAML 转成 JSON?
粘贴或拖入文档,确认自动识别的输入格式,然后选择输出格式。两个方向都经过同一棵类型化树,因此嵌套、数字和布尔值都能完整保留。
CSV 转 JSON 时,前导零会保留吗?
会。只有当把某个数字打印回去能与原文完全一致时,单元格才会被转换成数字,因此像 007 这样的 ID 会保持为字符串 "007",而 12 则变成数字 12。
JSON 的键顺序会保留吗?
会。对象的键保持文档中的原有顺序,不会被按字母排序,因此输出结果仍可与源文件直接做差异比较。
为什么转换成 TOML 失败了?
TOML 的顶层必须是一个表,因此数组或单独的值无法表示。TOML 也没有 null:值为 null 的键会被丢弃,而不是让整个文档转换失败。
什么是 JSONL?什么时候该用它?
JSONL(也叫 NDJSON)每行放一个紧凑的 JSON 文档。日志流水线和机器学习数据集都在用它,因为读取方可以逐条流式处理,而不必先解析整个文件。