JSON to CSV

Konversi JSON array ke format CSV

Berjalan lokal ยท Aman untuk menempel rahasia
CSV akan muncul di siniโ€ฆ

Apa itu Konversi JSON ke CSV?

Konversi JSON ke CSV mengubah data terstruktur dari format JSON menjadi nilai-nilai yang dipisahkan koma, sebuah format tabular yang secara alami dikonsumsi oleh spreadsheet, basis data, dan alat analitik. JSON menyimpan data sebagai objek dan array bersarang tanpa skema yang tetap. CSV menyimpan data sebagai baris dan kolom dengan baris header yang mendefinisikan nama kolom. Konversi inilah yang memungkinkan data dari API masuk ke spreadsheet dan basis data.

CSV (Comma-Separated Values) didefinisikan oleh RFC 4180. Setiap baris adalah satu record, dan kolom dalam sebuah baris dipisahkan oleh karakter pembatas, yang paling umum adalah koma. Kolom yang mengandung pembatas, tanda kutip ganda, atau baris baru harus diapit oleh tanda kutip ganda, dengan tanda kutip di dalamnya di-escape dengan cara menggandakannya. Proses escape inilah yang menjadi sumber utama bug saat menulis konverter JSON-ke-CSV secara manual.

Konversi berjalan lancar ketika input Anda berupa array flat dari objek dengan kunci yang konsisten. Setiap objek menjadi satu baris, dan setiap kunci unik menjadi header kolom. Objek dan array bersarang memerlukan langkah perataan (flattening), dan kunci yang tidak konsisten antar objek membutuhkan strategi untuk menangani kolom yang tidak ada โ€” biasanya dengan membiarkan sel tersebut kosong. Konverter yang andal menangani semua kasus tepi ini secara otomatis.

Mengapa Mengonversi JSON ke CSV?

API mengembalikan JSON, tetapi spreadsheet, basis data SQL, dan alat BI mengharapkan data tabular. Mengonversi JSON ke CSV memungkinkan Anda memindahkan data antar sistem ini tanpa menulis skrip impor kustom.

โšก
Konversi Instan di Browser
Tempel JSON Anda dan unduh file-nya langsung. Tidak ada unggahan ke server, tidak ada batas ukuran file dari API eksternal, tidak ada antrean pemrosesan yang perlu ditunggu.
๐Ÿ”’
Pemrosesan Mengutamakan Privasi
Data Anda tetap berada di browser. Konversi berjalan sepenuhnya di JavaScript pada perangkat Anda. Ekspor basis data, data pengguna, dan data keuangan tidak pernah meninggalkan mesin Anda.
๐Ÿ”€
Dukungan Berbagai Pembatas
Pilih antara pembatas koma, titik koma, tab, atau pipa. Gunakan titik koma untuk spreadsheet dengan lokal Eropa, tab untuk file TSV, atau pipa untuk impor sistem lama.
๐Ÿ“‹
Tanpa Akun Diperlukan
Buka halaman dan langsung konversi. Tidak perlu daftar, tidak perlu API key, tidak perlu instalasi CLI. Bekerja di perangkat apa pun dengan browser modern.

Kasus Penggunaan JSON ke CSV

Ekspor Data API ke Spreadsheet
REST API mengembalikan JSON. Manajer produk dan analis membutuhkan data tersebut di Excel atau Google Sheets. Konversi respons API ke CSV dan buka langsung di aplikasi spreadsheet mana pun.
Impor Massal ke Basis Data
PostgreSQL COPY, MySQL LOAD DATA, dan SQLite .import semuanya menerima CSV. Konversi dataset Anda ke format tabular untuk pemuatan massal yang cepat tanpa menulis skrip impor kustom.
Pembuatan Prototipe Pipeline ETL
Pipeline ETL sering menghasilkan output antara yang sulit diinspeksi sebagai JSON mentah. Konversi output suatu langkah ke CSV dan buka di spreadsheet untuk memverifikasi transformasi sebelum menyambungkan seluruh pipeline.
Persiapan Data Uji QA
Engineer QA menghasilkan fixture pengujian dalam bentuk JSON, tetapi banyak kerangka pengujian dan alat pengujian berbasis data menerima CSV untuk input pengujian berparameter. Konversi fixture ke CSV tanpa pemformatan ulang secara manual.
Analisis Log dan Pelaporan
Log JSON terstruktur dari aplikasi dan layanan cloud dapat dikonversi ke CSV untuk diimpor ke alat BI seperti Tableau, Power BI, atau Looker untuk visualisasi dan pelaporan.
Pemrosesan Data Akademik
Mahasiswa dan peneliti yang bekerja dengan API data terbuka menerima respons JSON. Mengonversi ke CSV memungkinkan analisis di R, pandas, SPSS, atau Excel tanpa menulis kode parsing.

Referensi Pembatas CSV

Karakter pembatas memisahkan kolom dalam setiap baris. Koma adalah yang paling umum, tetapi pembatas lain juga standar dalam konteks tertentu. Memilih pembatas yang salah menyebabkan kolom bergabung atau terpecah secara tidak benar saat file dibuka.

PembatasKarakterEkstensiKapan Digunakan
Comma,.csvDefault for most spreadsheets and databases
Semicolon;.csvStandard in locales where comma is a decimal separator (DE, FR, BR)
Tab\t.tsvAvoids escaping when field values contain commas or semicolons
Pipe|.csvUsed in fixed-width legacy systems and some ETL pipelines

Menangani JSON Bersarang dalam CSV

CSV adalah format flat yang tidak memiliki cara alami untuk merepresentasikan objek atau array bersarang. Ketika JSON Anda mengandung struktur bersarang, konverter harus meratakannya menjadi kolom. Ada beberapa strategi, dan pilihan yang tepat bergantung pada bagaimana CSV akan dikonsumsi.

Perataan Notasi Titik
Kunci bersarang digabungkan dengan titik: {"address": {"city": "Jakarta"}} menjadi kolom bernama address.city dengan nilai Jakarta. Ini adalah pendekatan yang paling umum dan bekerja baik dengan alat yang mendukung referensi kolom bersarang.
Kolom Indeks Array
Array diluaskan menjadi kolom bernomor: {"tags": ["a", "b"]} menjadi tags.0 = a, tags.1 = b. Ini mempertahankan semua nilai tetapi menghasilkan banyak kolom ketika array berukuran besar.
Fallback String JSON
Nilai bersarang yang kompleks diserialisasi sebagai string JSON di dalam sel CSV: sel tersebut berisi teks JSON mentah. Ini mempertahankan struktur penuh tetapi mengharuskan konsumen untuk mem-parse nilai sel.
Mengabaikan Kolom Bersarang
Beberapa konverter mengabaikan objek dan array bersarang sepenuhnya, hanya mempertahankan kolom skalar (string, angka, boolean, null). Ini menghasilkan CSV yang bersih tetapi kehilangan data. Berguna hanya ketika Anda tahu kolom bersarang tidak dibutuhkan.

Contoh Kode

Mengonversi JSON ke CSV secara terprogram memerlukan penanganan ekstraksi header, pengapit kolom, dan escape pembatas. Sebagian besar bahasa memiliki dukungan bawaan atau dari pustaka standar untuk penulisan CSV.

JavaScript (Node.js)
const data = [
  { name: "Alice", age: 30, city: "Berlin" },
  { name: "Bob", age: 25, city: "Tokyo" },
]

// Extract headers from the first object
const headers = Object.keys(data[0])
const csv = [
  headers.join(","),
  ...data.map(row => headers.map(h => {
    const val = String(row[h] ?? "")
    // Quote fields that contain commas, quotes, or newlines
    return val.includes(",") || val.includes('"') || val.includes("\n")
      ? '"' + val.replace(/"/g, '""') + '"'
      : val
  }).join(","))
].join("\n")

console.log(csv)
// โ†’ name,age,city
// โ†’ Alice,30,Berlin
// โ†’ Bob,25,Tokyo
Python
import json, csv, io

json_str = '[{"name":"Alice","age":30,"city":"Berlin"},{"name":"Bob","age":25,"city":"Tokyo"}]'
data = json.loads(json_str)

output = io.StringIO()
writer = csv.DictWriter(output, fieldnames=data[0].keys())
writer.writeheader()
writer.writerows(data)

print(output.getvalue())
# โ†’ name,age,city
# โ†’ Alice,30,Berlin
# โ†’ Bob,25,Tokyo
CLI (jq + Miller)
# Using jq to convert JSON array to CSV
echo '[{"name":"Alice","age":30},{"name":"Bob","age":25}]' | \
  jq -r '(.[0] | keys_unsorted) as $k | $k, (.[] | [.[$k[]]] ) | @csv'
# โ†’ "name","age"
# โ†’ "Alice",30
# โ†’ "Bob",25

# Using Miller (mlr) for streaming conversion
echo '[{"name":"Alice","age":30}]' | mlr --json --ocsv cat
# โ†’ name,age
# โ†’ Alice,30
Go
package main

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

func main() {
    jsonStr := `[{"name":"Alice","age":30},{"name":"Bob","age":25}]`
    var data []map[string]interface{}
    json.Unmarshal([]byte(jsonStr), &data)

    w := csv.NewWriter(os.Stdout)
    // Write header
    headers := []string{"name", "age"}
    w.Write(headers)
    // Write rows
    for _, row := range data {
        record := make([]string, len(headers))
        for i, h := range headers {
            record[i] = fmt.Sprintf("%v", row[h])
        }
        w.Write(record)
    }
    w.Flush()
    // โ†’ name,age
    // โ†’ Alice,30
    // โ†’ Bob,25
}

Pertanyaan yang Sering Diajukan

Struktur JSON seperti apa yang diharapkan konverter ini?
Konverter mengharapkan array JSON berisi objek, seperti [{"name":"Budi"},{"name":"Sari"}]. Setiap objek dalam array menjadi satu baris dalam output, dan kunci objek menjadi header kolom. Satu objek JSON (tidak dibungkus dalam array) diperlakukan sebagai tabel satu baris.
Bagaimana objek dan array bersarang ditangani?
Nilai bersarang diratakan menggunakan notasi titik. Misalnya, {"address":{"city":"Jakarta"}'} menghasilkan kolom bernama address.city. Array diluaskan menjadi kolom berindeks (tags.0, tags.1). Ini mempertahankan data sekaligus menjaga output tetap flat.
Apa yang terjadi jika objek memiliki kunci yang berbeda-beda?
Konverter mengumpulkan semua kunci unik dari semua objek dalam array dan menggunakannya sebagai header kolom. Objek yang tidak memiliki suatu kunci akan mendapat sel kosong untuk kolom tersebut. Tidak ada data yang hilang, dan urutan kolom mengikuti urutan kemunculan pertama kunci.
Bisakah saya menggunakan titik koma atau tab sebagai ganti koma?
Ya. Alat ini mendukung pembatas koma, titik koma, tab, dan pipa. Gunakan titik koma ketika data atau lokal Anda menggunakan koma sebagai pemisah desimal (umum dalam spreadsheet Jerman, Prancis, dan Brasil). Gunakan tab untuk file TSV yang dikonsumsi oleh alat Unix.
Apakah konversi bersifat lossless?
Untuk array JSON flat dengan nilai skalar yang konsisten, ya. File output mengandung data yang sama dan dapat dikonversi kembali ke JSON yang identik. Untuk struktur bersarang, perataan mengubah bentuk data. Nilai array yang diserialisasi ke kolom berindeks atau string JSON dapat direkonstruksi, tetapi proses bolak-balik memerlukan pengetahuan tentang struktur aslinya.
Seberapa besar file JSON yang bisa dikonversi?
Alat ini berjalan di browser Anda dan memproses data di memori โ€” file hingga 10โ€“20 MB dapat dikonversi tanpa masalah di perangkat modern. Untuk file yang lebih besar, gunakan alat CLI seperti jq, Miller, atau skrip Python dengan modul csv, yang memproses data sebagai stream.
Apakah aman menempelkan data sensitif ke alat ini?
Ya. Semua pemrosesan terjadi di browser Anda menggunakan JavaScript. Tidak ada data yang dikirimkan ke server mana pun. Anda dapat memverifikasi ini dengan membuka developer tools browser dan memeriksa tab Network selama konversi.