All Tools / Blog / Cara Format dan Validasi JSON Online

Cara Format dan Validasi JSON Online

3 min read

JSON yang diminifikasi tidak bisa dibaca. Blob satu baris dari respons API atau file config mustahil di-debug tanpa memformatnya dulu. Berikut cara memformat JSON secara instan, memvalidasinya, dan memperbaiki error umum yang membuat parser tersedak.

Apa yang dilakukan pemformatan JSON

Pemformatan (disebut juga pretty-printing) mengubah ini:

{"name":"John Doe","age":30,"address":{"city":"Jakarta","zip":"10001"},"tags":["developer","writer"]}

Menjadi ini:

{
  "name": "John Doe",
  "age": 30,
  "address": {
    "city": "Jakarta",
    "zip": "10001"
  },
  "tags": [
    "developer",
    "writer"
  ]
}

Data yang sama, whitespace berbeda — JSON tetap valid di kedua bentuk.

Format di browser

Tempel JSON yang diminifikasi ke formatter, klik format, dan dapatkan output yang diindentasi. Sebagian besar formatter juga memvalidasi saat kamu mengetik, menyorot baris persis di mana error sintaks terjadi. Ini jalur tercepat untuk debugging satu kali.

Format di JavaScript

const minified = '{"name":"John Doe","age":30}';
const formatted = JSON.stringify(JSON.parse(minified), null, 2);
console.log(formatted);

JSON.stringify(value, replacer, space) — argumen ketiga adalah indentasi. 2 memberi indentasi 2 spasi; '\t' memberi tab.

Format file JSON di Node.js:

const fs = require('fs');
const data = JSON.parse(fs.readFileSync('data.json', 'utf8'));
fs.writeFileSync('data.json', JSON.stringify(data, null, 2));

Format di Python

import json

minified = '{"name": "John Doe", "age": 30}'
formatted = json.dumps(json.loads(minified), indent=2)
print(formatted)

Format file secara langsung:

import json

with open('data.json', 'r') as f:
    data = json.load(f)

with open('data.json', 'w') as f:
    json.dump(data, f, indent=2, ensure_ascii=False)

ensure_ascii=False mempertahankan karakter Unicode (é, ñ, 你好, huruf Arab, aksara Jawa) alih-alih mengubahnya menjadi escape \uXXXX.

Command line: jq

jq adalah JSON processor di command line. Format sebuah file:

# Install
brew install jq        # macOS
sudo apt install jq    # Ubuntu

# Pretty-print
jq . data.json

# Minifikasi
jq -c . data.json

# Format respons API yang di-pipe
curl -s https://api.example.com/data | jq .

One-liner Python (tidak perlu install):

python3 -m json.tool data.json

Error JSON yang umum dan cara memperbaikinya

Trailing comma:

{
  "name": "John",
  "age": 30,    ← error
}

JSON tidak mengizinkan trailing comma. Hapus koma terakhir sebelum } atau ].

Tanda kutip tunggal alih-alih ganda:

{'name': 'John'}   ← error

JSON mengharuskan tanda kutip ganda untuk semua string dan key. Ganti ' dengan ".

Key tanpa tanda kutip:

{name: "John"}   ← error

Sintaks object literal JavaScript bukan JSON yang valid. Key harus dikutip: {"name": "John"}.

Komentar:

{
  // Ini adalah object user
  "name": "John"
}

JSON tidak mendukung komentar. Hapus komentar tersebut, atau gunakan format JSONC jika toolmu mendukungnya.

Nilai undefined atau NaN:

{"value": undefined}   ← error
{"value": NaN}         ← error

undefined, NaN, dan Infinity adalah nilai JavaScript, bukan nilai JSON. Ganti dengan null, 0, atau hapus field-nya.

Karakter khusus yang tidak di-escape dalam string:

{"message": "Dia berkata "halo""}   ← error

Tanda kutip ganda di dalam string harus di-escape: {"message": "Dia berkata \"halo\""}. Baris baru dalam string juga perlu di-escape: gunakan \n, bukan baris baru literal.

Validasi secara programatik

function isValidJson(str) {
    try {
        JSON.parse(str);
        return true;
    } catch {
        return false;
    }
}
import json

def is_valid_json(s: str) -> bool:
    try:
        json.loads(s)
        return True
    except json.JSONDecodeError:
        return False

Untuk penggunaan produksi dengan pesan error yang detail, JSON.parse (JS) dan json.loads (Python) melempar exception dengan posisi error.

Pengurutan key

Key yang diurutkan secara alfabet membuat perbandingan diff jauh lebih bersih di version control:

const sorted = JSON.stringify(data, Object.keys(data).sort(), 2);
json.dumps(data, sort_keys=True, indent=2)

Ringkasan

  • JSON.stringify(data, null, 2) di JavaScript dan json.dumps(data, indent=2) di Python memformat objek apa pun.
  • jq . adalah formatter command-line tercepat — juga bekerja bagus dengan output curl.
  • Lima error JSON paling umum: trailing comma, tanda kutip tunggal, key tanpa tanda kutip, komentar, dan karakter yang tidak di-escape.
  • Gunakan ensure_ascii=False di Python untuk menjaga Unicode tetap terbaca.
  • Urutkan key dengan sort_keys=True atau Object.keys().sort() untuk diff yang lebih bersih.