Bantuan teknis

Mengapa JSON.parse Mengatakan "Unexpected token"?

JSON.parse melempar Unexpected token jika teks bukan JSON yang valid. Telusuri kutip tunggal, koma trailing, respons HTML, dan posisi galat.

Jawaban singkat

JSON.parse() melempar SyntaxError jika masukan bukan JSON yang valid. “Unexpected token” umumnya berarti parser mencapai karakter yang tidak diizinkan pada titik itu dalam struktur.

Penyebab umum meliputi kutip tunggal, koma trailing, nama properti tanpa kutip, escape string yang salah, teks ekstra di sekitar JSON, atau mengurai HTML atau badan non-JSON lain sebagai JSON.

Bunyi galat yang tepat berbeda menurut mesin JavaScript dan peramban. Jangan menganggap setiap runtime mencetak “Unexpected token X in JSON at position N”.

Ini adalah pemecahan Unexpected token pada JSON.parse: arti galat, cara membaca position, dan apa yang dilakukan jika badannya HTML. Cakupan koma trailing, kutip, dan Unexpected end yang lebih luas ada di Kesalahan JSON Umum: Koma Trailing, Tanda Kutip, dan Unexpected Token.

Apa Arti “Unexpected token” dalam JSON.parse()?

JSON.parse() menuntut tata bahasa JSON. Karakter ilegal pada posisi saat ini melempar SyntaxError. {“name”:“Alex”,} tidak valid: setelah koma itu objek tidak boleh berakhir. Teks pesan dan position masih berbeda per runtime.

Galat Apa yang Dilempar JSON.parse()?

JSON tidak valid umumnya melempar SyntaxError. Catat error.name untuk memastikan tipenya. Jangan meng-hardcode error.message lengkap: mesin dan versi merumuskannya berbeda.

try {
  JSON.parse('{"name":"Alex",}');
} catch (error) {
  console.log(error.name);
  // SyntaxError
}

1. Memakai Kutip Tunggal, Bukan Kutip Ganda

{‘name’:‘Alex’} bukan JSON yang valid. {“name”:“Alex”} valid. String JSON dan nama anggota objek memakai kutip ganda. Literal objek JavaScript seperti const user = { name: ‘Alex’ } bisa sah sebagai JavaScript dan tetap bukan teks JSON.

Tidak valid

{'name':'Alex'}

Valid

{"name":"Alex"}

2. Koma Trailing

Koma setelah properti atau item array terakhir tidak valid dalam JSON standar. {“name”:“Alex”,“age”:30,} dan [1, 2, 3,] keduanya gagal. Perlakukan ini sebagai satu penyebab Unexpected token; Kesalahan JSON Umum: Koma Trailing, Tanda Kutip, dan Unexpected Token membahas koma trailing lebih dalam.

Tidak valid

{
  "name": "Alex",
  "age": 30,
}

Valid

{
  "name": "Alex",
  "age": 30
}
[1, 2, 3,]

3. Nama Properti Tanpa Kutip

{ name: “Alex” } bisa menjadi literal objek JavaScript. Dalam JSON, nama anggota objek adalah string dan perlu kutip ganda: {“name”:“Alex”}.

Tidak valid

{
  name: "Alex"
}

Valid

{
  "name": "Alex"
}

4. Escape String Tidak Valid

Dalam teks JSON, backslash memulai escape. Jalur mentah seperti C:\Users\Alex tidak valid karena \U bukan escape yang sah. Gandakan backslash. Jangan mencampur escape string bahasa tuan rumah dengan escape JSON. Kesalahan JSON Umum: Koma Trailing, Tanda Kutip, dan Unexpected Token membahas ini lebih dalam.

Tidak valid

{"file":"C:\Users\Alex"}

Valid

{"file":"C:\\Users\\Alex"}

5. Teks Extra Sebelum atau Sesudah JSON

JSON.parse mengharapkan satu nilai JSON. Awalan seperti Success: sebelum {“ok”:true}, atau akhiran seperti done sesudahnya, membuat seluruh string tidak valid. Spasi tak bermakna di sekitar satu nilai JSON diizinkan. JSON tidak dilarang punya spasi sebelum atau sesudah nilai.

Success:
{"ok":true}
{"ok":true}
done

6. Mengurai HTML, Bukan JSON

Memanggil response.json() pada halaman HTML adalah kasus Unexpected token yang umum. Endpoint salah, halaman HTML 404 atau 500, pengalihan login, badan proksi, dan halaman cadangan sering dimulai dengan markup. “Unexpected token < selalu berarti HTML” terlalu kuat: < adalah petunjuk, bukan bukti.

fetch('/api/data')
  .then(response => response.json())

Apa Arti “Unexpected token <” Biasanya?

Nilai JSON biasanya tidak dimulai dengan <. Jika badan dimulai dengan atau , < mungkin karakter ilegal pertama. Saat menelusuri secara lokal, periksa status HTTP, Content-Type, dan badan mentah. Bunyi mesin tetap berbeda.

Periksa Respons Sebelum Mengurainya

Badan fetch hanya dapat dikonsumsi sekali. Saat menelusuri secara lokal, baca text() dulu, inspeksi awalan singkat, lalu JSON.parse string yang sama. Jangan memanggil response.json() lalu response.text() pada respons yang sama. Jangan mencatat muatan produksi yang sensitif secara bawaan.

const response = await fetch(url);
const text = await response.text();

console.log(response.status);
console.log(response.headers.get("content-type"));
console.log(text.slice(0, 200));

try {
  const data = JSON.parse(text);
  console.log(data);
} catch (error) {
  console.error("Invalid JSON:", error);
}

Apa Arti “at Position 123”?

Beberapa mesin melaporkan position, baris, atau kolom. Cari di dekatnya kutip, koma, kurung, atau escape yang rusak. Indeks itu tempat penguraian menyadari masalah; penyebab sebenarnya bisa lebih awal. Itu tidak dijamin karakter yang rusak persis.

Unexpected token lawan Unexpected end

Unexpected token berarti parser menemui karakter yang tidak diharapkannya. Unexpected end dapat muncul jika masukan berhenti sebelum nilai lengkap, seperti {“name”:“Alex” tanpa kurung tutup. Bunyi tepat bergantung pada mesin. Kesalahan JSON Umum: Koma Trailing, Tanda Kutip, dan Unexpected Token membahas JSON tidak lengkap lebih luas.

{"name":"Alex"

JSON Bukan Literal Objek JavaScript

JSON adalah format data. Literal objek JavaScript adalah sintaks JavaScript. Objek JS dengan kunci tanpa kutip, kutip tunggal, dan koma trailing bukan teks JSON yang valid. JSON.parse tidak dapat mengurai literal objek JavaScript dengan aman.

const data = {
  name: 'Alex',
  active: true,
};
{
  "name": "Alex",
  "active": true
}

Bisakah JSON Berisi Komentar?

JSON standar tidak mendukung komentar. Baris // di dalam objek tidak valid. JSON5 dan perluasan serupa adalah format berbeda. Format dan bandingkan JSON memvalidasi JSON standar dengan JSON.parse dan tidak memperlakukan JSON5 sebagai JSON.

{
  // user name
  "name": "Alex"
}

Apakah undefined, NaN, dan Infinity JSON yang Valid?

Tidak. Nilai JSON adalah object, array, string, number, true, false, dan null. undefined, NaN, dan Infinity bukan. Nilai tingkat atas tidak harus objek atau array: true, 123, “hello”, dan null adalah JSON yang valid.

{"a":undefined}
{"a":NaN}
{"a":Infinity}
true
123
"hello"
null

Cara Memperbaiki Galat Unexpected token Langkah demi Langkah

Kerjakan sumbernya, bukan string galat:

  1. Pastikan masukan memang JSON, bukan HTML, log, atau JavaScript.
  2. Periksa karakter pertama dari masukan mentah.
  3. Jika berasal dari API, periksa status HTTP dan Content-Type. Baik 200 maupun application/json tidak menjamin JSON yang valid.
  4. Validasi sintaks di parser JSON.
  5. Pakai position, baris, atau kolom yang dilaporkan sebagai petunjuk, bukan sebagai akar penyebab yang dijamin.
  6. Periksa kutip, koma, kurung kurawal, kurung siku, dan escape di dekat area itu.
  7. Bandingkan dengan salinan yang sudah diformat dan divalidasi.
  8. Perbaiki serializer atau endpoint. Jangan menghapus token yang dilaporkan secara acak.
Jangan "Memperbaiki" JSON dengan Mengganti Kutip Secara Acak

Penggantian global ' dengan " dapat merusak apostrof di dalam string, teks yang sudah di-escape, dan sumber non-JSON. Hasilkan JSON yang valid dari serializer yang sebenarnya. Jangan anggap eval sebagai parser JSON.

Pakai JSON.stringify() Saat Menghasilkan JSON di JavaScript

Utamakan JSON.stringify daripada menggabungkan string secara manual. Ia mengeluarkan teks JSON yang valid untuk nilai yang diserialisasi. Ia tidak mempertahankan setiap nilai JavaScript: undefined, fungsi, dan simbol punya perilaku khusus. Rincian itu di luar cakupan di sini.

const data = {
  name: "Alex",
  active: true
};
const json = JSON.stringify(data);
// {"name":"Alex","active":true}

JSON Tidak Valid lawan Perbaikan Nyata

Pasangan ini dicek dengan JSON.parse. Untuk HTML, perbaikannya adalah respons, bukan suntingan sintaks.

Masalah Tidak valid Perbaikan
Kutip tunggal {'a':1} {"a":1}
Koma trailing {"a":1,} {"a":1}
Kunci tanpa kutip {a:1} {"a":1}
undefined {"a":undefined} {"a":null}
Badan HTML <html>... Periksa endpoint dan respons mentah. Jangan menyunting HTML menjadi JSON.

Panduan Keputusan Unexpected token yang Sederhana

Jika JSON.parse gagal, putuskan dulu apakah Anda punya JSON sebelum menulis ulang kutip.

  • JSON.parse gagal
  • Dari API? Periksa status, Content-Type, dan badan mentah
  • Apakah dimulai dengan JSON? Jika tidak, perbaiki sumber atau endpoint
  • Jika ya, validasi kutip, koma, kurung kurawal, kurung siku, escape, nilai yang tidak didukung
  • Pakai position yang dilaporkan sebagai petunjuk
  • Perbaiki sumber, lalu uraikan lagi
Unexpected token menamai kejutan. Sumber teks sering kali perbaikan yang sebenarnya.

Validasi JSON Sebelum Mengurai atau Memakainya

NEXNARA Format dan bandingkan JSON memvalidasi JSON di peramban dengan JSON.parse—bukan eval.

Validasi, rapikan dengan 2 spasi, 4 spasi, atau tab, minify, salin, unduh, dan unggah .json. JSON Diff mencakup objek dan array bersarang, jalur, ringkasan, filter, dan tukar. Setelah diuraikan, salinan rapi dan minify dari data yang sama dibandingkan sama; kunci objek dibandingkan menurut nama.

Teks lebih besar dari 5 MB bisa terasa lambat. Teks lebih besar dari 15 MB tidak diproses di peramban.

Validasi dan pemformatan JSON terjadi di peramban Anda. Alat ini tidak mengirim JSON ke server NEXNARA. Iklan dan fitur situs lain tetap memakai jaringan.

Tempel string yang gagal ke Format dan bandingkan JSON dan baca karakter pertama sebelum menulis ulang kutip.

FAQ

Mengapa JSON.parse mengatakan Unexpected token?

Teks bukan JSON yang valid pada titik parser berhenti. Penyebab khas adalah kutip, koma, teks extra, atau badan non-JSON seperti HTML.

Apa arti Unexpected token < dalam JSON?

Karakter ilegal pertama mungkin <. Itu sering menunjuk ke halaman HTML, tetapi bukan bukti 404 atau HTML dalam setiap kasus. Periksa status, Content-Type, dan badan mentah.

Bagaimana cara menemukan posisi galat dalam JSON?

Jika mesin melaporkan position, baris, atau kolom, lihat di dekatnya. Kesalahan sebenarnya bisa lebih awal. Pakai sebagai petunjuk, lalu validasi.

Bisakah JSON memakai kutip tunggal?

Tidak. String dan nama anggota JSON standar memakai kutip ganda.

Bisakah JSON punya koma trailing?

Tidak. JSON standar tidak mengizinkan koma setelah properti atau item array terakhir.

Bagaimana cara memeriksa apakah string adalah JSON yang valid?

Panggil JSON.parse dalam try/catch, atau tempel teks ke Format dan bandingkan JSON. Jika penguraian melempar SyntaxError, string itu bukan JSON yang valid.