JSON Toolkit

JSON ke Excel: Empat Pendekatan dan Di Mana Masing-Masing Kehilangan Kesetiaan

Intinya: Struktur bersarang, field yang tidak konsisten, dan array dari array adalah titik di mana konversi JSON ke spreadsheet rusak. Empat pendekatan diurutkan berdasarkan waktu hingga hasil, masing-masing dengan trade-off.

Pemula±11 menit bacaDiterbitkan 2026-10-30Diperbarui 2026-10-30
Sampul untuk panduan praktik JSON ke Excel

Intinya: array object yang rata atau object yang membungkus array paling cepat dikonversi melalui alat online; gunakan Power Query saat data disegarkan setiap minggu, pandas saat banyak field perlu dibersihkan, dan skrip Node hanya saat konversi harus bergabung ke pipeline — tetapi tentukan apa arti "satu baris" sebelum menyentuh data bersarang atau kunci yang tidak konsisten.

Konversinya sendiri tidak sulit; yang sulit adalah menemukan setelahnya bahwa angka berubah menjadi teks dan beberapa level penyarangan runtuh menjadi satu. Baca struktur data sebelum memilih metode dan Anda menghemat satu kali rework.

1. Pertama, tentukan jenis JSON yang Anda miliki

Buka file dan lihat tingkat terluarnya:

Struktur Bentuk Tingkat kesulitan konversi
Array object yang rata [{"a":1,"b":2},{...}] Paling mudah — satu baris per record
Object yang membungkus array {"data":[{...}],"total":100} Mudah — ambil level data
Object bersarang {"user":{"name":"x"}} Sedang — tentukan apakah diratakan atau digabung menjadi string
Array dari array {"tags":["a","b"]} Menyakitkan — tidak muat dalam satu baris, perlu pemecahan tabel
Kunci tidak konsisten Setiap record memiliki field berbeda Menyakitkan — kolom akhirnya sebagian besar kosong

Dua yang pertama dikonversi langsung dengan tingkat keberhasilan mendekati 100%; untuk tiga terakhir, tentukan dulu apa arti "satu baris", jika tidak lembar hasilnya tidak dapat digunakan.

2. Pendekatan 1: alat online (1 menit)

Buka JSON ke tabel, tempelkan data → pilih pemisah dan header → ekspor CSV → buka di Excel. Cocok untuk beberapa puluh hingga beberapa ribu baris data yang terstruktur baik.

Tiga hal yang harus Anda waspadai:

  • Anda mendapat CSV, bukan xlsx. Saat Excel membuka CSV, ia menebak encoding dari locale sistem, sehingga teks Tionghoa bisa menjadi mojibake. Menggunakan "Data → From Text/CSV" dan memilih UTF-8 secara eksplisit lebih andal.
  • Pengenal yang dimulai dengan 0 kehilangan nolnya. "007" adalah teks di CSV, tetapi Excel mengubahnya menjadi angka 7 secara otomatis. Setel kolom itu sebagai teks saat impor, atau tambahkan prefiks padanya di JSON.
  • Angka panjang menjadi notasi ilmiah. Nomor identitas nasional dan nomor order yang lebih dari 15 digit kehilangan presisi; field seperti ini seharusnya sudah berupa string di JSON, dan harus tetap dalam format teks setelah impor.

3. Pendekatan 2: Power Query bawaan Excel (dapat digunakan ulang)

Saat data Anda disegarkan setiap minggu, gunakan Power Query bawaan Excel: konfigurasikan sekali, lalu cukup klik "Refresh":

  1. "Data" → "Get Data" → "From File" → "From JSON";
  2. Setelah memilih file Anda masuk ke editor Power Query, di mana Anda melihat struktur List / Record;
  3. Klik ikon perluas di sisi kanan header kolom untuk memperluas field bersarang level demi level;
  4. Setelah nama kolom dan tipe tampak benar, "Close & Load".

Keunggulannya adalah penyarangan dapat diperluas menjadi beberapa kolom lapis demi lapis, dan tipe dapat ditetapkan secara manual; harganya adalah penyiapan pertama membutuhkan pemahaman perbedaan antara List dan Record — List adalah array, Record adalah object, dan keduanya memuai ke arah yang berbeda.

4. Pendekatan 3: Python + pandas (banyak field, perlu pembersihan)

import pandas as pd

# Object wrapping an array: first reach the list level
rows = pd.read_json('data.json')['data']

# Expand nested fields into multiple columns
frame = pd.json_normalize(rows, sep='_')

frame.to_excel('out.xlsx', index=False)

Parameter kunci json_normalize adalah sep, yang menentukan gaya penamaan kolom setelah field bersarang diperluas; user_name lebih mudah digunakan di Excel daripada user.name. Array dari array (seperti tags) membutuhkan langkah explode tambahan:

frame = frame.explode('tags')

Langkah ini memecah satu baris menjadi beberapa, satu-satunya cara mempertahankan relasi satu-ke-banyak — dengan konsekuensi field lainnya terduplikasi.

5. Pendekatan 4: skrip Node (saat harus bergabung ke pipeline)

import { readFileSync, writeFileSync } from 'node:fs';

const rows = JSON.parse(readFileSync('data.json', 'utf8'));
const headers = [...new Set(rows.flatMap((row) => Object.keys(row)))];
const escapeCell = (value) => `"${String(value ?? '').replaceAll('"', '""')}"`;
const lines = [
  headers.join(','),
  ...rows.map((row) => headers.map((key) => escapeCell(row[key])).join(',')),
];

writeFileSync('out.csv', '\uFEFF' + lines.join('\n'), 'utf8');

Dua detail yang tidak boleh dilewati: tulis \uFEFF (BOM) di awal agar Excel mengenali UTF-8, dan escape kutip ganda di dalam sel sebagai "", jika tidak kolomnya bergeser.

6. Tiga hal yang selalu hilang dalam konversi

Yang hilang Gejala Perbaikan
Informasi tipe Number dan boolean menjadi teks atau TRUE/FALSE Setel tipe kolom secara manual setelah impor, atau tentukan di Power Query
Level penyarangan Field dalam runtuh menjadi [object Object] Gunakan json_normalize atau perluas level demi level — jangan pernah String(obj)
Relasi satu-ke-banyak Array dimasukkan ke satu sel Pisahkan baris dengan explode, atau buat tabel terkait terpisah

Selain itu, null dan "field tidak ada" tampak sama di lembar kerja (keduanya sel kosong) tetapi bermakna berbeda dalam domain bisnis. Saat Anda perlu membedakannya, konversi null secara eksplisit menjadi string "null" di JSON, atau tambahkan kolom penanda _has_field.

7. Verifikasi setelahnya: jangan hanya melihat baris pertama

Setelah konversi, periksa sekilas setidaknya tiga hal:

  1. Jumlah record: jumlah baris CSV harus sama dengan panjang array + 1 (header); baris yang hilang biasanya berarti baris baru di akhir tertelan;
  2. Kolom dengan tingkat null tertinggi: banyak sel kosong menandakan nama kunci tidak konsisten — kembali dan periksa apakah JSON asli memakai dua ejaan (userId dan user_id);
  3. Baris terpanjang: array bersarang biasanya mendarat di sana; pastikan tidak ada yang terpotong.

Saat Anda membutuhkan operasi sebaliknya (Excel/CSV kembali ke JSON), gunakan CSV ke JSON, dan ingat bahwa header diperlakukan sebagai nama kunci — mengubah header berarti mengubah nama field.

FAQ

Bagaimana cara memilih antara alat online, Power Query, dan pandas?

Gunakan alat online untuk beberapa puluh hingga beberapa ribu baris data terstruktur baik yang Anda konversi sekali. Gunakan Power Query saat data disegarkan setiap minggu, karena dikonfigurasi sekali dan disegarkan dengan satu klik. Gunakan pandas dengan json_normalize saat banyak field perlu dibersihkan, dan skrip Node saat konversi harus bergabung ke pipeline.

Mengapa teks Tionghoa berubah menjadi mojibake di CSV?

Ekspornya adalah CSV, bukan xlsx, dan Excel menebak encoding dari locale sistem, sehingga UTF-8 tanpa BOM menampilkan mojibake. Tulis BOM \uFEFF di awal file, atau buka melalui "Data → From Text/CSV" dan pilih UTF-8 secara eksplisit.

Haruskah object bersarang diratakan atau dipecah menjadi baris tambahan?

Ratalkan level demi level alih-alih menempelkannya sebagai string: Power Query memperluas field bersarang menjadi kolom, dan json_normalize dengan sep melakukan hal yang sama di pandas. Array dari array membutuhkan langkah explode tambahan yang memecah satu baris menjadi beberapa. Memberikan object dalam ke String(obj) hanya menghasilkan [object Object].