DokumenGambarMediaAlat PDF

Konversi JSON ke TOML Online

Konversi JSON ke TOML (Cargo.toml, Hugo, Netlify) secara gratis di browser Anda.

title = "My Project"
version = "1.0.0"
features = ["async", "json"]

[dependencies]
serde = "1.0"
tokio = "1.28"

[[authors]]
name = "John"
email = "john@example.com"
Processed in your browser

JSON ke TOML untuk Rust, Hugo, dan konfigurasi modern

Cargo.toml untuk Rust

Konversi dependensi atau konfigurasi JSON ke format manifest crate standar Rust.

Hugo dan Netlify

Front matter dan konfigurasi untuk situs Hugo, netlify.toml, dan konfigurasi CI/CD.

pyproject.toml (PEP 518)

Migrasi konfigurasi proyek Python dari JSON ke format pyproject.toml standar.

100% privat

Konversi berjalan di browser Anda. Kode dan konfigurasi Anda tidak pernah meninggalkan perangkat Anda.

Tiga langkah, tanpa kerumitan

1

Tempel atau unggah JSON Anda

Tempelkan konten JSON ke editor atau unggah file .json. Tanpa pendaftaran, tanpa batas.

2

Konversi otomatis

JSON dikonversi ke sintaks TOML yang valid di browser Anda. Tanpa server, tanpa transmisi data.

3

Salin atau unduh TOML

TOML siap digunakan sebagai Cargo.toml, konfigurasi Hugo, netlify.toml, atau pyproject.toml.

Ada pertanyaan?

TOML (Tom's Obvious, Minimal Language) dibuat oleh Tom Preston-Werner, salah satu pendiri GitHub, pada 2013. Preston-Werner merancangnya karena ia menemukan YAML terlalu ambigu dan JSON terlalu bertele-tele dan canggung untuk diedit secara manual sebagai format konfigurasi. TOML mencapai versi 1.0 pada Januari 2021 setelah bertahun-tahun pengembangan dan peninjauan. Tujuannya adalah menjadi format konfigurasi yang jelas dibaca oleh manusia dan tidak ambigu untuk diurai oleh mesin. Saat ini ini adalah format konfigurasi standar untuk ekosistem Rust (Cargo.toml), generator situs statis Hugo, dan didefinisikan sebagai format resmi untuk metadata paket Python dalam PEP 518 (pyproject.toml).

JSON tepat dan universal tetapi canggung untuk konfigurasi yang ditulis tangan: tidak mengizinkan komentar, mengharuskan tanda kutip pada semua kunci, dan koma di akhir dilarang. YAML lebih mudah dibaca tetapi memiliki spesifikasi yang terkenal rumit dengan berbagai cara untuk mengekspresikan hal yang sama, dan kesalahan indentasi dapat secara diam-diam mengubah arti file. TOML menempati jalan tengah: menggunakan bagian [table] dan sintaks kunci sama nilai yang familiar bagi siapa pun yang pernah mengedit file .ini, mendukung komentar dengan tanda pagar, tidak bergantung pada indentasi seperti YAML, dan memiliki spesifikasi yang ringkas karena versi 1.0 kurang dari 5000 kata. Keterbatasan TOML adalah tidak cocok untuk data yang bersarang dalam atau struktur data serbaguna.

Cargo.toml adalah file manifest untuk setiap crate (paket) dalam Rust. File ini mendefinisikan nama paket, versi mengikuti semver, penulis, edisi Rust, dan dependensi. Bagian [dependencies] adalah tempat perpustakaan eksternal dideklarasikan dengan versinya. Cargo, manajer paket Rust, membaca file ini untuk menyelesaikan pohon dependensi, mengunduh paket dari crates.io, dan mengkompilasi proyek. Jika Anda memiliki konfigurasi dependensi dalam JSON dan perlu memigrasikannya ke proyek Rust, konverter ini menghasilkan TOML yang benar.

Hugo, generator situs statis berbasis Go, mendukung tiga format front matter untuk halaman konten: YAML (dibatasi oleh ---), TOML (dibatasi oleh +++), dan JSON (dibatasi oleh kurung kurawal). Front matter TOML dalam Hugo terlihat seperti blok +++ yang berisi title, date, tags, dan draft masing-masing dalam baris terpisah. Jika Anda memiliki front matter dalam JSON dan ingin memigrasikannya ke konvensi TOML yang disukai banyak tema Hugo, konverter ini menangani transformasi dalam hitungan detik.

pyproject.toml adalah file konfigurasi standar untuk proyek Python, didefinisikan dalam PEP 518 (2016) dan diperluas oleh PEP 517, PEP 621, dan PEP 660. File ini menggantikan setup.py dan setup.cfg lama dengan satu file deklaratif. Dewan pengarah Python memilih TOML setelah mengevaluasi YAML, JSON, dan lainnya: YAML ditolak karena spesifikasinya yang rumit dan perilaku yang mengejutkan, JSON karena tidak adanya komentar. Bagian [build-system] mendefinisikan build backend seperti setuptools, flit, hatch, atau poetry, [project] mendefinisikan metadata paket, dan bagian seperti [tool.ruff] atau [tool.mypy] mengonfigurasi alat pengembangan.

TOML menangani dua atau tiga level bersarang dengan baik melalui tabel: [database.server] membuat objek bersarang. Untuk bersarang yang lebih dalam, TOML menggunakan tabel inline. Namun, JSON dengan objek yang bersarang lebih dari tiga atau empat level dapat menjadi bertele-tele dan tidak alami dalam TOML. Kasus khusus yang tidak ditangani TOML dengan elegan adalah array objek dengan beberapa properti: TOML memerlukan sintaks [[table.array]] dengan bagian yang berulang. Jika JSON Anda memiliki struktur yang bersarang dalam yang dimaksudkan untuk data bukan konfigurasi, pertimbangkan apakah TOML adalah format target yang tepat atau apakah YAML akan lebih sesuai.

Konversi JSON ke TOML: Cargo.toml, Hugo, Netlify, dan pyproject.toml

TOML (Tom's Obvious, Minimal Language) dibuat pada 2013 oleh Tom Preston-Werner, salah satu pendiri GitHub, pencipta Jekyll (generator situs statis yang menggerakkan GitHub Pages dan mempopulerkan konsep JAMstack sebelum nama itu ada), dan penulis spesifikasi Semantic Versioning di semver.org. Preston-Werner merancang TOML sebagai respons langsung dan terprogram terhadap frustrasi dengan format konfigurasi yang ada. YAML, meski terlihat mudah dibaca, memiliki spesifikasi lebih dari 80 halaman yang mencakup berbagai cara yang setara dan sering mengejutkan untuk mengekspresikan data yang sama. File YAML dengan indentasi yang salah dapat sepenuhnya mengubah artinya tanpa memicu kesalahan parse, sehingga berbahaya dalam konfigurasi infrastruktur. JSON, untuk bagiannya, tepat dan universal tetapi memiliki keterbatasan kritis untuk konfigurasi yang ditulis dan dikelola oleh manusia: tidak mengizinkan komentar apa pun, mengharuskan tanda kutip ganda pada semua kunci bahkan yang sederhana, melarang koma di akhir dalam array dan objek, dan tidak menawarkan sintaks yang nyaman untuk merepresentasikan struktur bagian hirarkis. TOML memecahkan semua masalah ini dengan sintaks bagian [table] dan kunci sama nilai yang familiar, dukungan komentar dengan tanda pagar, tidak ada ketergantungan pada indentasi untuk makna, dukungan asli eksplisit untuk tanggal dan timestamp yang sesuai RFC 3339, dan spesifikasi lengkap yang tidak ambigu yang mencapai versi stabil 1.0.0 pada Januari 2021 setelah delapan tahun pengembangan iteratif.

Ekosistem TOML terbesar dan paling aktif dalam praktik adalah Rust dan manajer paketnya Cargo. Cargo, sistem build dan manajer paket resmi Rust yang merupakan bagian dari toolchain sejak rilis stabil pertama Rust pada Mei 2015, menggunakan Cargo.toml sebagai format manifest untuk setiap crate. Cargo.toml proyek Rust yang tipikal berisi: bagian [package] dengan nama, versi (semver diperlukan), penulis, edisi (2015, 2018, atau 2021), deskripsi, lisensi, URL repositori, dan tautan dokumentasi; bagian [dependencies] dengan dependensi produksi yang menentukan batasan versi dan flag fitur opsional; [dev-dependencies] untuk dependensi hanya uji; [build-dependencies] untuk skrip build.rs; [features] untuk mendefinisikan kemampuan crate opsional; dan [workspace] untuk mengelola monorepo multi-crate. Crates.io, registri paket Rust resmi, memiliki lebih dari 140.000 crate yang diterbitkan. Netlify mengadopsi TOML untuk file netlify.toml-nya, yang mendefinisikan aturan build, header HTTP kustom per pola jalur, aturan redirect dan rewrite dengan dukungan regex penuh dan kode status HTTP arbitrer, konfigurasi fungsi serverless dan Edge Function, serta variabel lingkungan terbatas per konteks deployment. Hugo menggunakan TOML sebagai salah satu dari tiga format front matter yang didukung untuk halaman konten, dan banyak tema dan starter kit Hugo resmi dan komunitas menggunakan file konfigurasi default mereka dalam format TOML.

Python mengadopsi TOML sebagai format konfigurasi proyek resmi melalui serangkaian PEP yang mencakup dari 2016 hingga saat ini. PEP 518 pada Mei 2016 memperkenalkan pyproject.toml dengan bagian [build-system] untuk menentukan build backend dan dependensi instalasinya sendiri. PEP 517 pada September 2017 memformalkan antarmuka standar antara frontend instalasi seperti pip dan build dan backend build seperti setuptools, flit, hatch, dan poetry. PEP 621 pada November 2020 menstandarkan metadata paket dalam bagian [project]: nama, versi, deskripsi, readme, lisensi, penulis dan pengelola, klasifier PyPI, kata kunci, URL proyek, versi Python minimum di requires-python, dependensi runtime dalam dependencies, dan dependensi opsional yang dikelompokkan. Bagian [tool.nama_alat] memungkinkan setiap alat ekosistem menyimpan konfigurasinya tanpa konflik: [tool.ruff] untuk linter dan formatter Ruff yang ditulis dalam Rust dan tercepat dalam ekosistem, [tool.mypy] untuk pemeriksa tipe mypy, [tool.pytest.ini_options] untuk pytest, [tool.black] untuk formatter Black. Sebelum pyproject.toml, proyek Python tipikal memerlukan file konfigurasi terpisah untuk setiap alat. pyproject.toml menyatukan semuanya dalam satu file deklaratif yang dapat dibaca dan dianotasi manusia. Mengonversi data konfigurasi JSON yang dihasilkan secara terprogram ke TOML adalah langkah alami ketika konfigurasi tersebut membutuhkan pemeliharaan dan peninjauan manusia yang berkelanjutan.