Baris pertama CSV menjadi kunci, dan setiap baris data menjadi satu objek JSON
CSV adalah tabel yang selnya dipisahkan koma dan barisnya dipisahkan pergantian baris. Larik objek JSON adalah daftar objek, masing-masing berisi pasangan nama dan nilai, yang ditulis di dalam tanda kurung siku [ ]. Keduanya dapat menyimpan data yang sama. Nama kolom di baris pertama CSV menjadi kunci objek, dan setiap baris di bawahnya menjadi satu objek. Pada contoh di atas, baris pertama 'kode,nama,harga,stok,catatan' menjadi lima kunci, dan tiga baris data menjadi tiga objek. Sebaliknya, saat JSON diubah menjadi CSV, semua kunci yang muncul di objek-objek dikumpulkan menjadi kolom, dan setiap objek ditulis sebagai satu baris.
Konverter ini langsung bekerja begitu Anda menempel teks atau membuka file. Pemisah dipilih otomatis di antara koma, tab, titik koma, dan garis tegak, sedangkan nilai berawalan nol seperti 0012 dibiarkan sebagai teks secara bawaan. JSON yang objeknya bersarang, seperti respons API, diratakan menjadi kolom seperti 'pelanggan.nama'. Pada bagian 'Lihat sebagai tabel' di bawah, batang per kolom menunjukkan berapa banyak angka, teks, dan sel kosong yang bercampur, dan jika Anda mengeklik nomor baris, 'Uraian baris' menampilkan objek JSON atau baris CSV hasil baris itu. Jika tanda kutip atau jumlah sel tidak cocok, konverter menunjukkan baris dan posisinya. Teks dan file yang Anda masukkan tidak dikirim ke server, dan semuanya diproses di browser ini.
Kapan CSV dan JSON perlu saling diubah
- Memasukkan daftar Excel ke layanan web: Jika daftar produk, anggota, atau stok Anda kelola di spreadsheet dan harus dimasukkan sekaligus ke API atau alat admin yang menerima larik JSON, ubah CSV menjadi JSON.
- Melihat respons API atau log sebagai tabel: JSON dari alat pengembang atau layanan dapat diubah menjadi CSV agar bisa diurutkan dan disaring di Excel atau Google Sheets. Walaupun respons dibungkus seperti { "data": [ … ] }, Anda bisa memilih larik di dalamnya untuk dijadikan tabel.
- Menyusun konfigurasi, teks terjemahan, atau data uji: Kumpulkan nilai di spreadsheet yang mudah diedit banyak orang, lalu ekspor sebagai JSON untuk dibaca program.
- Dua program yang hanya menerima format berbeda: Jika satu pihak hanya dapat mengekspor CSV dan pihak lain hanya menerima JSON, ubah formatnya di tengah untuk memindahkan data.
Aturan konversi
- Membaca CSV: Sel dipisahkan oleh pemisah dan baris oleh pergantian baris. Sel yang berisi pemisah, tanda kutip ganda, atau pergantian baris diapit seluruhnya dengan tanda kutip ganda, dan tanda kutip ganda di dalam sel ditulis dua kali (""). Spasi dianggap bagian dari nilai dan dibiarkan (RFC 4180). Baris yang benar-benar kosong dilewati, kecuali pada CSV satu kolom, yang membaca baris kosong sebagai nilai kosong.
- Nama kolom: Baris pertama menjadi kunci. Jika ada nama yang kosong atau nama yang sama muncul dua kali, tidak bisa ditentukan nilai mana milik kunci mana, sehingga konversi dihentikan. Jika baris pertama sudah berisi data, ubah 'Baris pertama' menjadi 'Data'. Kuncinya menjadi kolom1, kolom2 ….
- Pemeriksaan jumlah sel: Setiap baris harus memiliki jumlah sel yang sama dengan baris pertama. Sel yang kurang tidak ditebak dan sel yang berlebih tidak dibuang; baris yang tidak sesuai ditunjukkan kepada Anda.
- Nilai: Pilihan bawaan 'Semua teks' memindahkan setiap sel sebagai string. Jika Anda memilih 'Kenali angka', nilai diubah menjadi angka, true atau false, dan null sesuai aturan pada tabel di bawah.
- JSON → CSV: Kunci yang muncul di setiap objek dikumpulkan menurut urutan kemunculan pertama menjadi kolom. Kunci yang tidak ada pada suatu objek, dan nilai null, menjadi sel kosong. Objek di dalam objek diratakan dengan nama yang dihubungkan titik (.), dan larik dengan nomor yang dimulai dari 0.
- Menulis CSV: Hanya sel yang berisi pemisah, tanda kutip ganda, atau pergantian baris yang diapit tanda kutip ganda, dan akhir baris ditulis sebagai CRLF. BOM untuk Excel hanya ditambahkan di awal saat file disimpan, tidak pada teks yang disalin.
Dasar pengubahan nilai menjadi angka
CSV tidak mengenal tipe data, sehingga semua selnya berupa teks. 'Kenali angka' hanya mengubah sel menjadi angka jika sesuai dengan sintaks angka JSON dan nilainya tetap sama ketika diubah kembali menjadi teks. Sintaks JSON tidak mengizinkan angka nol di awal, sehingga 0012 bukan angka (RFC 8259). Bilangan bulat yang ditangani browser secara akurat hanya sampai 9.007.199.254.740.991 (253 − 1), jadi nomor pesanan yang lebih besar dibiarkan sebagai teks.
| Sel CSV | Semua teks | Kenali angka | Alasan |
|---|---|---|---|
0012 | "0012" | "0012" | Nol di awal tidak sesuai sintaks angka JSON |
25900 | "25900" | 25900 | Bilangan bulat |
1.50 | "1.50" | 1.5 | Nilainya sama, nol di akhir hilang |
1e3 | "1e3" | 1000 | Notasi eksponen juga angka |
TRUE | "TRUE" | true | true dan false tidak membedakan huruf besar-kecil |
null | "null" | null | Hanya null huruf kecil |
| (kosong) | "" | "" | Tetap string kosong |
9007199254740993 | "9007199254740993" | "9007199254740993" | Melebihi rentang bilangan bulat yang aman |
0.1234567890123456 | "0.1234567890123456" | "0.1234567890123456" | 16 digit signifikan tidak dapat disimpan secara akurat |
-0 | "-0" | "-0" | Jika diubah menjadi angka menjadi 0, sehingga dibiarkan sebagai teks |
"1,234" | "1,234" | "1,234" | Nilai dengan koma pemisah ribuan adalah teks |
Untuk nilai yang tidak dihitung, seperti kode produk, kode pos, atau nomor telepon, 'Semua teks' lebih aman. 'Kenali angka' menilai setiap sel, bukan per kolom: kode yang diawali 0 tetap menjadi teks, tetapi kode seperti 1234 atau 0 saja sesuai dengan sintaks angka sehingga menjadi angka, dan satu kolom bisa berisi campuran teks dan angka. Jika ada kolom kode, gunakan 'Semua teks'.
Meratakan JSON bersarang seperti respons API menjadi tabel
Contoh JSON → CSV adalah respons yang daftar pesanannya berada di dalam kunci 'pesanan'. Jika bagian terluar berupa objek, konverter mencari larik objek di dalamnya untuk dijadikan tabel, dan bila ada beberapa, larik dengan item terbanyak dipilih lebih dulu. Untuk memakai larik lain atau menjadikan seluruh objek satu baris, ubah 'Larik untuk tabel' di kolom input. Objek di dalam objek dihubungkan dengan titik seperti 'pelanggan.nama', dan larik diberi nomor seperti 'tag.0' dan 'tag.1'.
| nomor | pelanggan.nama | pelanggan.kota | jumlah | lunas | tag.0 | tag.1 | catatan |
|---|---|---|---|---|---|---|---|
| A-0012 | Sari | Jakarta | 2 | true | baru | kupon | |
| A-0013 | Budi | Surabaya | 1 | false |
Pesanan kedua tidak memiliki 'tag' dan 'catatan'-nya null, sehingga semuanya menjadi sel kosong. Objek kosong { } dan larik kosong [ ] ditulis di sel sebagai teks {} dan [] agar tidak disangka nilainya hilang. Jika CSV yang sudah diratakan seperti ini diubah lagi menjadi JSON, 'pelanggan.nama' menjadi satu kunci yang memuat titik dan tidak kembali ke struktur bersarang. JSON Lines (.jsonl), yang berisi satu objek per baris, juga dapat langsung ditempel dan setiap barisnya dibaca sebagai satu baris data.
Membuka dan menyimpan di Excel
- Agar karakter tidak rusak: Microsoft menjelaskan bahwa CSV UTF-8 yang disimpan dengan BOM (Byte Order Mark) dapat dibuka di Excel dengan cara biasa. Karena itu 'BOM untuk Excel' aktif secara bawaan saat CSV disimpan. File tanpa BOM dapat dibuka lewat tab Data di Excel, lalu Dapatkan Data > Dari File > Dari Teks/CSV, sehingga Anda bisa memilih penyandian karakter.
- Pemisah titik koma: Hasil CSV konverter ini secara bawaan memakai titik koma sebagai pemisah. Pemisah daftar yang dipakai Excel untuk menyimpan CSV secara bawaan adalah koma, tetapi dapat diubah ke karakter lain di pengaturan wilayah Windows, dan setelah diubah semua program memakai karakter itu. Karena itu, tergantung pengaturan wilayah, CSV bisa dipisahkan dengan titik koma. Jika Anda membutuhkan koma atau tab, ubah 'Pemisah' di area hasil. Pada input, pilihan 'Otomatis' juga mengenali titik koma.
- Sel yang disalin dari Excel: Jika Anda memilih sel di Excel atau Google Sheets lalu menyalin dan menempelkannya, sel-sel dipisahkan oleh tab. Pilihan 'Otomatis' memilih tab sebagai pemisah, sehingga Anda bisa langsung mengonversi tanpa menyimpan file.
- File berpenyandian lama: File yang tidak terbaca sebagai UTF-8 dibaca ulang sebagai Windows-1252 (penyandian Windows untuk bahasa Eropa Barat, yang di browser dikenal juga dengan label seperti latin1), dan penyandian yang dipakai ditampilkan di atas kolom input.
- Buku kerja Excel: File .xlsx dan .xls adalah buku kerja terkompresi sehingga tidak dapat dibuka langsung. Simpan dulu sebagai CSV di Excel, lalu buka di sini.
Sintaks CSV mengacu pada RFC 4180, sintaks JSON dan rentang angka pada RFC 8259, serta penjelasan BOM, pemisah daftar, dan nol di awal pada dokumentasi dukungan Microsoft yang dicek pada 2026-10-20.
Informasi yang hilang saat melewati CSV
Sel CSV hanya dapat berisi teks, sehingga tipe data JSON tidak bertahan selama melewati CSV. Berikut hal-hal yang berbeda dari aslinya setelah satu putaran JSON → CSV → JSON.
| JSON asli | Sel CSV | JSON lagi (semua teks) |
|---|---|---|
"catatan": null | (kosong) | "catatan": "" |
"catatan": "" | (kosong) | "catatan": "" |
| Tanpa kunci | (kosong) | "catatan": "" |
"jumlah": 3 | 3 | "jumlah": "3" |
"lunas": true | true | "lunas": "true" |
"pelanggan": {"nama": "Sari"} | Sari di kolom pelanggan.nama | "pelanggan.nama": "Sari" |
Jika data Anda perlu membedakan null, string kosong, dan kunci yang tidak ada, simpan juga JSON aslinya atau sediakan kolom terpisah untuk mencatat statusnya. Angka dan true atau false dapat dikembalikan dengan 'Kenali angka', tetapi "3" yang semula berupa string pun ikut menjadi angka. Batang pada tabel menunjukkan jenis nilai di JSON asli, sehingga sel yang semula null diwarnai sebagai 'boolean/null' dan dibedakan dari sel kosong.
Kesalahan yang sering terjadi
- Koma di dalam nilai tidak diapit: Jika Anda menulis hitam, abu-abu tanpa tanda kutip ganda, jumlah sel bertambah satu dan muncul galat seperti 'Ada 6 sel'. Apit seluruh sel, misalnya "hitam, abu-abu".
- Tanda kutip di tengah sel: Jika ada tanda kutip ganda di tengah sel, seperti Dudukan laptop "aluminium", apit seluruh sel dan tulis tanda kutip di dalamnya dua kali: "Dudukan laptop ""aluminium""".
- Memasukkan CSV tanpa baris judul begitu saja: Baris data pertama menjadi nama kolom dan satu data hilang. Ubah 'Baris pertama' menjadi 'Data'.
- Menulis nomor besar sebagai angka: Jika bilangan bulat besar seperti 9007199254740993 ditulis tanpa tanda kutip di JSON, nilainya berubah saat browser membacanya. Konverter ini berhenti ketika menemukan nilai seperti itu dan meminta Anda mengapitnya dengan tanda kutip ganda agar menjadi string.
- Menulis kunci yang sama dua kali dalam satu objek: Standar JSON menganjurkan agar nama di dalam objek unik (RFC 8259). Jika kunci yang sama muncul dua kali, konverter ini hanya mempertahankan nilai terakhir.
- CSV dibuka di Excel dan 0012 menjadi 12: Walaupun hasil konversi masih memuat 0012, Excel menghapus nol di awal dan mengubah angka besar menjadi notasi eksponen seperti 1,23E+15. Excel hanya menangani 15 digit signifikan, sehingga pada nomor kartu atau nomor pesanan dengan 16 digit atau lebih, digit setelah ke-15 berubah menjadi 0. Impor lewat Data > Dari Teks/CSV dan tetapkan format kolom itu sebagai Teks.
Batasan dan hal yang perlu diperhatikan
- Input maksimal 5 MB (5.242.880 byte), 200.000 sel termasuk judul, dan hasil maksimal 10 MB. Data yang lebih besar sebaiknya dibagi per baris, dan setiap file hasil pembagian diberi judul yang sama.
- Tampilan tabel hanya menggambar 100 baris dan 60 kolom pertama. Konversi, penyalinan, dan penyimpanan dilakukan pada seluruh data.
- CSV → JSON selalu menghasilkan larik objek yang datar. Nama kolom yang memuat titik tidak dikembalikan menjadi objek bersarang.
- JSON Lines hanya dibaca. Jika Anda ingin hasil dengan satu objek per baris, gunakan konverter larik JSON ↔ JSONL.
- Angka desimal JSON diubah menjadi angka presisi ganda saat dibaca browser, sehingga digit terakhir desimal yang sangat panjang dapat berubah. Nilai yang digitnya harus dijaga sebaiknya dimasukkan sebagai string.
- Sel yang diawali =, +, -, @, atau tab dapat ditafsirkan Excel sebagai rumus (OWASP menyebutnya CSV injection atau formula injection). Konverter ini tidak mengubah nilai, jadi saat mengubah data yang asalnya tidak jelas menjadi CSV lalu membukanya di Excel, periksa dulu apakah ada sel seperti itu.
Sumber
- 01IETF — RFC 4180: Common Format and MIME Type for CSV Files2005, Informational. §2 akhir baris CRLF, baris judul bersifat opsional, jumlah field sama di setiap baris, spasi adalah bagian dari field, field berisi pergantian baris, tanda kutip ganda, atau koma diapit tanda kutip ganda, tanda kutip di dalamnya ditulis dua kali — dicek 2026-10-20
- 02IETF — RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format§4 nama di dalam objek sebaiknya unik (SHOULD), §6 tanpa nol di awal dan bilangan bulat interoperabel dalam [−(253)+1, (253)−1], §8.1 UTF-8 tanpa BOM
- 03JSON LinesUTF-8, satu nilai JSON per baris, akhir baris '\n', ekstensi .jsonl
- 04Dukungan Microsoft — Opening CSV UTF-8 files correctly in ExcelCSV UTF-8 yang disimpan dengan BOM dapat dibuka dengan cara biasa; Data > Dapatkan Data > Dari File > Dari Teks/CSV
- 05Dukungan Microsoft — Import or export text (.txt or .csv) filesPemisah daftar bawaan saat menyimpan CSV adalah koma; dapat diubah di pengaturan wilayah Windows dan berlaku untuk semua program
- 06WHATWG — Encoding StandardLabel windows-1252 (termasuk latin1, iso-8859-1, ascii), Shift_JIS, dan EUC-KR
- 07MDN — Number.MAX_SAFE_INTEGER253 − 1 = 9.007.199.254.740.991; bilangan bulat yang lebih besar tidak dapat direpresentasikan dengan aman
- 08Dukungan Microsoft — Keeping leading zeros and large numbersExcel menghapus nol di awal dan mengubah angka besar ke notasi eksponen; 15 digit signifikan; impor lewat Dari Teks/CSV dan jadikan kolom bertipe Teks
- 09OWASP — CSV InjectionDefinisi formula injection dan karakter awal yang berbahaya (=, +, -, @, tab, carriage return)
Pertanyaan yang sering diajukan
Bagaimana cara mengubah CSV menjadi JSON?
Tempel CSV di kolom input di atas atau buka file, maka larik objek JSON langsung muncul di kolom hasil. Nama kolom pada baris pertama menjadi kunci, dan setiap baris di bawahnya menjadi satu objek. Salin dengan tombol salin atau simpan sebagai file .json.
Apakah nol di awal seperti 0012 tidak hilang?
Tidak hilang. Pilihan bawaan 'Semua teks' memindahkan semua sel sebagai string, sehingga 0012 menjadi "0012". Bahkan jika Anda memilih 'Kenali angka', nilai yang diawali 0 tidak sesuai sintaks angka JSON dan tetap menjadi teks.
Bagaimana agar harga atau jumlah menjadi angka, bukan string?
Ubah 'Nilai' di kolom hasil menjadi 'Kenali angka'. Maka 25900 menjadi angka 25900, true dan false menjadi boolean, dan null menjadi null. Bilangan bulat yang lebih besar dari 9.007.199.254.740.991 dan desimal dengan 16 digit signifikan atau lebih dibiarkan sebagai teks agar nilainya tidak berubah.
CSV hasil konversi terlihat rusak karakternya saat dibuka di Excel.
Aktifkan 'BOM untuk Excel' saat menyimpan. Pilihan ini aktif secara bawaan, dan CSV UTF-8 dengan BOM langsung terbuka di Excel. File tanpa BOM dapat dibuka lewat tab Data > Dari Teks/CSV di Excel dengan memilih penyandian UTF-8.
Apakah file yang dipisahkan titik koma atau tab bisa dikonversi?
Bisa. 'Otomatis' memilih pemisah dari koma, tab, titik koma, dan garis tegak yang jumlahnya sama di setiap baris dalam 20 baris pertama. Sel yang disalin dari Excel masuk dengan pemisah tab dan langsung dikonversi. Pemisah CSV hasil juga dapat dipilih.
Bisakah JSON bersarang atau respons API diubah menjadi CSV?
Bisa. Jika bagian terluar berupa objek, larik objek di dalamnya dicari dan dijadikan tabel. Objek di dalam objek diratakan dengan titik seperti 'pelanggan.nama', dan larik dengan nomor seperti 'tag.0'. Untuk memakai larik lain, pilih di 'Larik untuk tabel'. JSON Lines dengan satu objek per baris juga dapat dibaca.
Bagaimana jika CSV tidak punya nama kolom di baris pertama?
Ubah 'Baris pertama' di kolom input menjadi 'Data'. Baris pertama juga dibaca sebagai data, dan kuncinya diberi nama otomatis seperti kolom1 dan kolom2. Jika tidak diubah, baris data pertama menjadi nama kolom dan satu data hilang.
Apakah data yang saya masukkan dikirim ke server?
Tidak dikirim. Teks yang ditempel dan file yang dibuka hanya dikonversi di browser ini dan tidak disimpan. Input diproses hingga 5 MB dan 200.000 sel.