Cara Cepat Memperbaiki File JSON yang Rusak: Panduan Lapangan untuk Developer
Panggilan API Anda baru saja gagal dengan JSONDecodeError: Expecting property name enclosed in double quotes. Waktu terus berjalan. Data berasal dari LLM, dan di suatu tempat dalam respons 2.000 token itu, satu koma ekstra menghancurkan seluruh pipeline Anda.
Per Mei 2026, cara tercepat untuk memperbaiki file JSON yang rusak adalah menggunakan library otomatis seperti json_repair (Python) atau jsonrepair (npm). Alat-alat ini dirancang khusus untuk memperbaiki error sintaks hasil LLM secara instan. Untuk perbaikan manual, penyebab yang paling sering adalah koma ekstra, kutip tunggal, atau key tanpa kutip — tiga pelanggaran paling umum terhadap standar RFC 8259.
Perbaikan Tercepat: json_repair untuk Output LLM
Parser standar seperti json.loads() di Python bersifat ketat sesuai desainnya. Satu karakter yang salah posisi memicu JSONDecodeError dan semuanya berhenti. Ini adalah masalah harian di tahun 2026 karena LLM rutin membungkus JSON dalam teks percakapan, memotong respons di tengah kalimat, atau menyisipkan komentar yang melanggar spesifikasi.
Library json_repair adalah solusi utamanya. Menurut GitHub, proyek ini memiliki lebih dari 4.700 bintang per tahun 2026. Cara kerjanya adalah dengan “menebak” maksud dari string tersebut — menutup kurung yang hilang, menambahkan tanda kutip, dan membuang teks tambahan di sekitar blok JSON.

Python: Sebelum dan Sesudah
Instal: pip install json-repair
Input yang rusak:
import json_repair
bad_json = '{"user": "Alice", "status": tru'
decoded_object = json_repair.loads(bad_json)
Apa yang terjadi di balik layar: json_repair melihat bahwa tru kemungkinan adalah true, menambahkan kurung tutup yang hilang, dan mengembalikan dictionary Python yang valid. Tanpa intervensi manual sama sekali.
Mode Salvage: Saat Datanya Benar-benar Berantakan
Untuk kasus yang lebih sulit, json_repair (v0.59.5+) menyertakan Mode Salvage. Seperti yang dicatat dalam dokumentasi proyek, mode ini dibuat khusus untuk respons AI yang terpotong atau log yang rusak. Mode ini dapat memaksa array menjadi objek atau membuang item yang terlalu rusak untuk diselamatkan, memastikan output sesuai dengan skema Anda.
import json_repair
# Salvage mode for severely truncated data
result = json_repair.loads(
'{"items": [{"id": 1, "name": "Widget"}, {"id": 2, "na',
salvage_mode=True
)
# Result: {'items': [{'id': 1, 'name': 'Widget'}, {'id': 2}]}
# Dropped the incomplete 'na' but saved everything else
Alternatif npm
Untuk proyek Node.js, CLI jsonrepair menangani tugas yang sama:
# Fix a file in place
npx jsonrepair broken.json > fixed.json
# Fix a string in a script
const { jsonrepair } = require('jsonrepair');
const fixed = jsonrepair('{"name": "test",}');
Debugging Manual: Mencari Apa yang Melanggar Spesifikasi
Ketika otomatisasi tidak berhasil, Anda perlu menemukan dengan tepat di mana file tersebut melanggar RFC 8259. JSON jauh lebih tidak toleran dibandingkan YAML atau JavaScript. Seperti yang dijelaskan oleh Tim Diagnostik JSONParser, “Parser gagal pada karakter pertama yang tidak dapat dipahaminya, yang sering kali merupakan gejala hilir dari masalah beberapa baris sebelumnya.”
Tiga Pembunuh JSON
Pembunuh 1: Koma Ekstra
Menurut DEV Community, koma ekstra adalah penyebab utama kegagalan parsing. Koma ini tidak masalah di JavaScript, tetapi ilegal setelah item terakhir dalam array atau objek JSON.
// BROKEN - trailing comma after "active"
{
"name": "Alice",
"status": "active",
}
// FIXED - no comma before closing brace
{
"name": "Alice",
"status": "active"
}
Pembunuh 2: Kutip Tunggal
JSON mengharuskan tanda kutip ganda (") untuk key maupun nilai string. Banyak developer Python dan JavaScript secara tidak sengaja menggunakan kutip tunggal ('). Seperti yang dicatat TidyCode, ini adalah perbaikan yang wajib dilakukan.
// BROKEN - single quotes
{'name': 'Alice'}
// FIXED - double quotes
{"name": "Alice"}
Pembunuh 3: Key Tanpa Kutip
Di JavaScript Anda bisa menulis { name: "Alice" }. Di JSON, setiap key memerlukan tanda kutip ganda.
// BROKEN - unquoted key
{name: "Alice"}
// FIXED - quoted key
{"name": "Alice"}

Error “Unexpected Token”
Ketika validator menandai “Unexpected Token,” itu berarti parser menemukan NaN, Infinity, atau undefined — konstanta JavaScript yang tidak didukung JSON. JSON hanya mengizinkan null, true, false, dan angka.
// BROKEN - NaN is not valid JSON
{"score": NaN, "result": Infinity}
// FIXED - replace with null or valid values
{"score": null, "result": null}
Parsing Ketat vs. Parsing Perbaikan: Kapan Menggunakan yang Mana
Pendekatan yang tepat bergantung pada asal data Anda. File konfigurasi yang disunting manusia sebaiknya menggunakan parsing ketat untuk memaksa penulis memperbaiki kesalahan. Data yang dihasilkan mesin dari LLM atau log API memerlukan parsing berbasis perbaikan.
| Fitur | Ketat (json.loads) |
Perbaikan (json_repair) |
|---|---|---|
| Koma Ekstra | Memunculkan JSONDecodeError |
Otomatis dihapus |
| Kutip Tunggal | Gagal | Dikonversi menjadi kutip ganda |
| Data Terpotong | Gagal | Menutup kurung/kutip yang terbuka |
| Komentar | Gagal | Otomatis dibuang |
| Kasus Penggunaan Terbaik | File konfigurasi hasil suntingan manusia | Output LLM, log API |
Perbaikan Terbimbing Skema dengan Pydantic
Anda dapat membimbing proses perbaikan menggunakan Pydantic v2 atau JSON Schema. Dengan memberikan skema pada json_repair, alat ini tidak hanya memperbaiki sintaks — alat ini juga dapat mengoreksi tipe (mengubah string "1" menjadi angka 1) dan mengisi field wajib yang hilang dengan nilai default.
from pydantic import BaseModel
import json_repair
class User(BaseModel):
id: int
name: str
active: bool = True
# Broken JSON with wrong types
raw = '{"id": "42", "name": "Alice"}'
repaired = json_repair.loads(raw)
# Validate against schema
user = User(**repaired)
# user.id is now int(42), user.active defaults to True
Seperti yang dicatat Stefano Baccianella dalam kutipan proyeknya tahun 2025, pendekatan ini dioptimalkan untuk JSON yang “sebagian besar benar tetapi secara teknis tidak valid” yang cenderung dihasilkan oleh model bahasa.
Menangani File Multi-Gigabyte Tanpa Crash
Memperbaiki cuplikan 10KB itu mudah. Memperbaiki file 2GB memerlukan strategi yang tidak akan memakan seluruh RAM Anda. Memuat seluruh file ke dalam memori menyebabkan error Out-of-Memory (OOM).
Strategi 1: Streaming dengan ijson
Untuk dataset raksasa, gunakan ijson untuk memproses data sebagian demi sebagian. Seperti yang disebutkan Scrapfly, ijson memproses data secara bertahap. Padukan dengan skrip pembersih yang memperbaiki masalah baris demi baris sebelum parsing.
import ijson
# Stream through a large JSON file
with open('huge_broken.json', 'r') as f:
for item in ijson.items(f, 'records.item'):
# Process each item individually
process(item)
Strategi 2: Pipe CLI untuk Efisiensi Maksimal
Pendekatan paling hemat memori untuk file besar adalah menggunakan CLI jsonrepair dan meneruskan output langsung ke file baru:
# Streams repair, never loads full file into memory
jsonrepair large_broken.json > fixed.json
Ini jauh lebih hemat memori dibandingkan memuat file ke Python atau browser.
Kesimpulan
Memperbaiki JSON yang rusak bukan lagi pekerjaan manual berkat library yang sadar AI seperti json_repair. Anda tetap perlu memahami dasar-dasar RFC 8259 — tidak ada koma ekstra, tidak ada kutip tunggal, tidak ada key tanpa kutip — tetapi otomatisasi adalah satu-satunya pendekatan praktis untuk data dalam skala besar di tahun 2026.
Alur kerjanya sederhana: coba library perbaikan terlebih dahulu. Jika gagal, gunakan validator untuk menemukan error sintaks yang tepat. Hal ini menjaga aplikasi Anda tetap berjalan bahkan ketika data yang masuk kurang dari sempurna.
FAQ
Apakah JSON secara resmi mendukung komentar atau kutip tunggal?
Tidak. Standar RFC 8259 secara ketat melarang komentar. Kutip tunggal juga tidak valid — hanya tanda kutip ganda yang diizinkan untuk key dan string. Namun, alat seperti json_repair dapat membuang komentar dan mengonversi tanda kutip secara otomatis agar file dapat diurai oleh library standar.
Bagaimana cara menangani file JSON yang rusak dan sangat besar tanpa crash?
Gunakan parser streaming seperti ijson untuk memproses data dalam potongan-potongan. Hindari memuat seluruh string yang rusak ke dalam satu variabel. Untuk hasil tercepat, gunakan alat perbaikan CLI yang meneruskan output langsung ke file baru di disk tanpa menyimpan semuanya di memori.
Apa perbedaan antara JSON yang rusak (malformed) dan JSON yang tidak valid (invalid)?
JSON yang rusak melanggar aturan sintaks — kurung hilang, key tanpa kutip, koma ekstra — sehingga tidak mungkin diurai. JSON yang tidak valid mengikuti semua aturan sintaks tetapi gagal cocok dengan JSON Schema tertentu (misalnya, sebuah field berupa string padahal skema mengharapkan bilangan bulat). Memperbaiki JSON yang rusak adalah perbaikan struktural; memperbaiki JSON yang tidak valid berkaitan dengan integritas data.
Bisakah saya menggunakan json_repair bersama validasi Pydantic?
Bisa. Jalankan json_repair.loads() terlebih dahulu untuk memperbaiki error sintaks, lalu teruskan dictionary yang telah diperbaiki ke model Pydantic Anda untuk validasi tipe dan penegakan skema. Pendekatan dua langkah ini menangani masalah struktural maupun semantik.
Bagaimana dengan JSON dengan komentar gaya JavaScript?
JSON standar tidak mendukung komentar, tetapi json_repair dapat membuang komentar // dan /* */ secara otomatis. Jika Anda memerlukan komentar dalam file konfigurasi, pertimbangkan untuk menggunakan format JSONC (JSON dengan Komentar) dan parser yang kompatibel seperti json5 untuk Python.