ToolDeck

TOML转JSON

将 TOML 格式转换为 JSON 格式

加载示例

TOML 输入

JSON 输出

本地运行 · 粘贴密钥安全无忧
JSON 输出将显示在此处…
也可以试试:TOML 格式化工具

什么是 TOML 转 JSON?

TOML(Tom's Obvious Minimal Language)是一种专为人类设计的配置文件格式。它能明确无歧义地映射到哈希表,支持嵌套表、类型化值和行内注释。许多工具和框架将 TOML 作为主要配置格式:Rust 项目依赖 Cargo.toml,Python 打包使用 pyproject.toml,Hugo 静态站点通过 config.toml 进行配置。在线将 TOML 转换为 JSON,可以将这些配置文件转换为几乎所有编程语言、API 和数据管道都能原生使用的格式。

JSON(JavaScript Object Notation)由 RFC 8259 定义,是支持最广泛的数据交换格式。TOML 以其简洁的语法和注释支持优先考虑人类可读性,而 JSON 则优先考虑机器互操作性。TOML 转 JSON 转换器通过按照 TOML v1.0.0 规范解析 TOML 输入,并生成结构等价的 JSON 文档来弥合这一差距。转换保留所有数据:字符串、整数、浮点数、布尔值、数组和表均直接映射到对应的 JSON 类型。

TOML 有四种原生日期/时间类型,JSON 无法直接表示:带时区的日期时间、本地日期时间、本地日期和本地时间。由于 JSON 没有日期类型,这些值在转换时会被序列化为 ISO 8601 字符串。

为什么使用 TOML 转 JSON 转换器?

以 TOML 编写的配置文件往往需要输入到仅接受 JSON 的系统中。与其手动重写文件或在本地安装解析库,基于浏览器的转换器能在几秒内完成转换。

🔒
隐私优先处理
您的 TOML 数据完全在浏览器中解析和转换,不会上传到任何服务器。这使得转换包含 API 密钥、数据库凭据或内部主机名的配置文件也十分安全。
即时转换
粘贴 TOML 即可立即获得格式化的 JSON 输出。无需安装 Node.js 包、Python 库或 CLI 工具来执行一次性的格式转换。
🔀
完整支持 TOML v1.0.0
转换器支持所有 TOML 数据类型,包括点式键、内联表、表数组、多行字符串和日期时间值。手动转换容易出错的边界情况均能正确处理。
📋
无需注册
打开页面,粘贴 TOML,复制 JSON 结果即可。无需注册,无速率限制,无使用追踪。每次访问该工具的体验完全一致。

TOML 转 JSON 使用场景

前端开发
将 Rust WASM 项目的 Cargo.toml 元数据转换为 JSON,供 JavaScript 构建脚本或 package.json 生成步骤使用。
后端工程
将以 TOML 编写的应用配置转换为 JSON,注入到需要 JSON 配置的环境中,例如 AWS Lambda 环境变量或 Docker 容器标签。
DevOps 与 CI/CD
GitHub Actions 和 GitLab CI 等流水线工具通常使用 JSON 输入。将基于 TOML 的工具配置(rustfmt.toml、taplo.toml)转换为 JSON,用于代码检查或验证步骤。
QA 与测试
从 TOML 源文件生成 JSON 测试夹具。TOML 因其注释支持和可读语法更易于维护为测试数据源,但测试框架通常需要 JSON 输入。
数据工程
在系统间迁移配置时,来自某一平台(如 InfluxDB、Telegraf)的 TOML 文件可能需要转换为另一平台 API 或导入工具所需的 JSON 文档。
学习与教育
学习数据格式的学生可以粘贴 TOML 示例,精确查看表如何变为嵌套对象、表数组如何变为 JSON 数组,以及 TOML 的日期类型如何映射到字符串。

TOML 转 JSON 类型映射参考

每种 TOML 类型都有对应的 JSON 等价类型,唯一例外是日期和时间值。下表展示了各 TOML 类型如何转换为 JSON。此映射遵循 TOML v1.0.0 规范,与 tomllib(Python)、toml-rs(Rust)和 @iarna/toml(Node.js)等标准解析器的行为一致。

类型TOML 语法JSON 输出
String"value""value"
Integer4242
Float3.143.14
Booleantrue / falsetrue / false
Offset Date-Time1979-05-27T07:32:00Z"1979-05-27T07:32:00Z"
Local Date-Time1979-05-27T07:32:00"1979-05-27T07:32:00"
Local Date1979-05-27"1979-05-27"
Local Time07:32:00"07:32:00"
Array[1, 2, 3][1, 2, 3]
Table[section]{ "section": {} }
Inline Table{ key = "val" }{ "key": "val" }
Array of Tables[[items]]"items": [{}]

TOML 整数支持下划线提高可读性(如 1_000_000),以及十六进制(0xDEADBEEF)、八进制(0o755)和二进制(0b11010110)字面量。所有这些在 JSON 中均转换为普通十进制数。TOML 还支持无穷大和 NaN 浮点值,但这些值在 JSON 中没有对应表示,在严格模式下会导致转换错误。

代码示例

以下是四种语言中 TOML 转 JSON 转换的可运行示例,每个示例均读取 TOML 文件、解析并输出格式化的 JSON。

JavaScript (Node.js)
import { parse } from '@iarna/toml'
import fs from 'fs'

const toml = fs.readFileSync('config.toml', 'utf8')
const json = parse(toml)
console.log(JSON.stringify(json, null, 2))
// Input:  [server]
//         host = "localhost"
//         port = 8080
// Output: { "server": { "host": "localhost", "port": 8080 } }
Python
import tomllib   # Python 3.11+ (standard library)
import json

with open('config.toml', 'rb') as f:
    data = tomllib.load(f)

print(json.dumps(data, indent=2, default=str))
# Dates become strings: "1979-05-27"
# Arrays of tables become JSON arrays of objects
Go
package main

import (
    "encoding/json"
    "fmt"
    "os"

    "github.com/BurntSushi/toml"
)

func main() {
    var data map[string]any
    _, err := toml.DecodeFile("config.toml", &data)
    if err != nil {
        panic(err)
    }
    out, _ := json.MarshalIndent(data, "", "  ")
    fmt.Println(string(out))
}
CLI (yj / dasel)
# Using yj (YAML/JSON/TOML converter)
cat config.toml | yj -tj

# Using dasel
dasel -f config.toml -r toml -w json

# Using Python one-liner (3.11+)
python3 -c "import tomllib, json, sys; print(json.dumps(tomllib.load(sys.stdin.buffer), indent=2, default=str))" < config.toml

常见问题

转换时 TOML 注释会怎样?
TOML 注释(以 # 开头的行)在转换时会被丢弃。JSON 不支持注释,因此无法在输出中保留注释。如果需要保留注释,可以考虑使用 JSONC(带注释的 JSON)作为目标格式。
TOML 转 JSON 会丢失数据吗?
对于标准 TOML 文档,不会丢失任何数据。所有字符串、数字、布尔值、数组和表都有直接对应的 JSON 类型。唯一的转换是日期和时间值,它们在 JSON 中变为 ISO 8601 字符串。有两种边界情况可能引发问题:TOML 支持无穷大和 NaN 浮点值,这些在 JSON 中没有对应表示;此外,非常大的整数可能超出 JSON 解析器的精度限制(JavaScript 中为 2^53 - 1)。
TOML 的表数组在 JSON 中如何表示?
TOML 的 [[双括号]] 语法定义表数组。每个 [[section]] 块都会向 JSON 数组追加一个新对象。例如,两个 [[fruits]] 块会变为包含两个对象的 JSON 数组:"fruits": [{...}, {...}]。双括号语法是 TOML 中较难初读理解的部分,而 JSON 输出使结构一目了然。
转换可逆吗?能从 JSON 转回 TOML 吗?
结构上可以。任何 JSON 对象都可以表示为 TOML 表,JSON 数组也可以映射到 TOML 数组。但是,TOML 特有的特性(如注释、点式键分组和内联表格式)在初始的 TOML 转 JSON 过程中已经丢失,无法恢复。往返转换会生成有效但可读性可能较差的 TOML。
TOML 和 JSON 作为配置文件有什么区别?
TOML 专为配置设计:支持注释,嵌套结构的语法更易读,能区分整数和浮点数,并包含原生日期/时间类型。JSON 则为程序间的数据交换而设计。JSON 获得工具和 API 的支持更广泛,但 TOML 对人类来说更易读易编辑。许多项目使用 TOML 作为源配置,并在部署时转换为 JSON。
该工具如何处理 server.host 这样的点式键?
TOML 中的点式键(如 server.host = "localhost")会在 JSON 中创建嵌套对象:{"server": {"host": "localhost"}}。这等同于定义一个包含 host 键的 [server] 表。转换器会自动将点式键解析为完整的嵌套结构。
为什么我的 TOML 文件无法转换?
常见原因包括:字符串值缺少引号(TOML 要求加引号)、在多行基本字符串内使用制表符缩进、重复的键定义,以及对同一路径混用点式键和显式表标题。转换器会显示解析器错误信息及行号,帮助您定位问题。