sintaks tidak tertangkap token U JSON tak terduga


294

Saya mendapatkan kesalahan ini "syntaxerror tak terduga U token tak terduga" ketika saya menjalankan halaman saya di chrome. Dan di firefox saya dapatkan, "JSON.parse: karakter yang tidak terduga". Saya mengembalikan data json dari file php dan string json yang kembali valid. Saya memeriksanya dengan http://jsonlint.com/ . Bantuan apa pun akan dihargai ... Terima kasih.

Inilah string JSON yang dikembalikan

[
    ["1","Pan Africa Market","\"1521 1st Ave, Seattle, WA\"","47.608941","-122.340145","restaurant"],
    ["2","The Melting Pot","14 Mercer St, Seattle, WA","47.624562","-122.356442","restaurant"],
    ["3","Ipanema Grill","1225 1st Ave, Seattle, WA","47.606366","-122.337656","restaurant"],
    ["4","Sake House","230 1st Ave, Seattle, WA","47.612825","-122.34567","bar"],
    ["5","Crab Pot","1301 Alaskan Way, Seattle, WA","47.605961","-122.34036","restaurant"],
    ["6","Mexican Kitchen","2234 2nd Ave, Seattle,WA","47.613975","-122.345467","bar"],
    ["7","Wingdome","1416 E Olive Way, Seattle, WA","47.617215","-122.326584","bar"],
    ["8","Piroshky Piroshky","1908 Pike pl, Seattle, WA","47.610127","-122.342838","restaurant"]
]

Bisakah Anda memposting JSON? Ketika saya mendapatkan kesalahan itu biasanya manes bahwa ada string yang tidak berakhir - ini menunjukkan bahwa itu adalah pada huruf 'U' di JSON.
Kyle Burton

Bisa jadi ada masalah aneh dengan \"di output.
Felix Kling

JSON itu mem-parsing baik-baik saja. Anda harus mencoba mencari tahu apa kode Anda sebenarnya tersedak.
nneonneo

Jawaban:


647

Kesalahan itu biasanya terlihat ketika nilai yang diberikan JSON.parsesebenarnya undefined. Jadi, saya akan memeriksa kode yang mencoba menguraikan ini - kemungkinan besar Anda tidak menguraikan string aktual yang ditampilkan di sini.


27
Mungkin juga "undefined"sebagai string bukan literal undefined. Saya hanya menghabiskan 30 menit mencari tahu itu.
ug_

13
@ ns47731 Itu sebenarnya sama. Alasan mengapa undefined aktual menjadi u, adalah yang undefineddipaksa menjadi string (karena string adalah apa yang diharapkan JSON.parse).
Sean Kinsey

10
Ugh, mengirim permintaan yang tidak sinkron dan segera mencoba mengurai pengembalian yang tidak ditentukan. Jijik pada diriku sendiri, terima kasih.
Chris Trudeau

7
Kesalahan ini juga akan dilemparkan melalui UTF-8 {"di awal string json
metamagikum

1
Kesalahan saya adalah Unexpected token N in JSON at position...dan masalahnya adalah doublenilai:NaN
Jaider

14

Saya menerima pesan ini saat memvalidasi (dalam proyek MVC). Bagi saya, menambahkan elemen ValidationMessageFor memperbaiki masalah ini.

Lebih tepatnya, nomor baris 43 di jquery.validate.unobtrusive.js menyebabkan masalah:

  replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false;

Ini membuat saya di jalur yang benar; dalam kasus saya, saya lakukan $("form :input").valid();untuk memicu validasi. Tapi ternyata itu mendapat kesalahan pada bidang tersembunyi tanpa ValidationMessageFor. Diperbaiki dengan mengubah ke$("form :input:visible").valid();
Trax72

7

Parameter untuk JSON.parse mungkin tidak mengembalikan apa-apa (yaitu nilai yang diberikan untuk JSON.parse adalah undefined)!

Itu terjadi pada saya ketika saya mem-parsing kode soliditas terkompilasi dari file xyz.sol.

import web3 from './web3';
import xyz from './build/xyz.json';

const i = new web3.eth.Contract(
  JSON.parse(xyz.interface),
  '0x99Fd6eFd4257645a34093E657f69150FEFf7CdF5'
);

export default i;

yang salah eja sebagai

JSON.parse(xyz.intereface)

yang tidak mengembalikan apa-apa!


5

Kasus paling umum dari kesalahan ini terjadi adalah menggunakan templat yang menghasilkan kontrol kemudian mengubah cara iddan / atau namesedang dihasilkan oleh templat default 'menimpa' dengan sesuatu seperti

@Html.TextBoxFor(m => m, new {Name = ViewData["Name"], id = ViewData["UniqueId"]} )

dan kemudian lupa untuk berubah ValidationMessageFormenjadi

@Html.ValidationMessageFor(m => m, null, new { data_valmsg_for = ViewData["Name"] })    

Semoga ini menghemat waktu Anda.


3

Saya mengalami kesalahan ini ketika saya menjalankan kondisi pencarian pada JSONArray dalam for loop. Masalah yang saya hadapi adalah hasil dari salah satu nilai dalam for for return null. Oleh karena itu, ketika saya mencoba mengakses properti itu gagal.

Jadi, jika Anda melakukan sesuatu dalam JSONArrays di mana Anda tidak yakin dengan sumber data dan integritasnya, saya pikir ini kebiasaan yang baik untuk menangani pengecualian nol dan tidak terdefinisi dalam kasus ini.

Saya memperbaikinya dengan memeriksa nol pada nilai pengembalian yang ditemukan di JSONArray dan menangani pengecualian dengan tepat.

Kupikir ini mungkin bisa membantu.


1

Dalam kasus saya itu mencoba untuk memanggil JSON.parse () pada variabel AJAX sebelum XHRResponse kembali. MISALNYA:

var response = $.get(URL that returns a valid JSON string);
var data = JSON.parse(response.responseText);

Saya menggantinya dengan contoh di luar situs jQuery seharga $ .get :

<script type="text/javascript"> 
    var jqxhr = $.get( "https://jira.atlassian.com/rest/api/2/project", function() {
          alert( "success" );
        })
          .done(function() {
//insert code to assign the projects from Jira to a div.
                jqxhr = jqxhr.responseJSON;
                console.log(jqxhr);
                var div = document.getElementById("products");
                for (i = 0; i < jqxhr.length; i++) {
                    console.log(jqxhr[i].name);
                    div.innerHTML += "<b>Product: " + jqxhr[i].name + "</b><BR/>Key: " + jqxhr[i].key + "<BR/>";
                }
                console.log(div);
            alert( "second success" );
          })
          .fail(function() {
            alert( "error" );
          })
          .always(function() {
            alert( "finished" );
          });

        // Perform other work here ...

        // Set another completion function for the request above
        jqxhr.always(function() {
          alert( "second finished" );
        });
</script>

1

Hanya memetikan Anda tidak mengerti

mis. adalah bahwa katakanlah saya memiliki JSON STRING .. TIDAK BELUM OBYEK ATAU ARRAY JSON.

jadi jika dalam javascript u parsing string as

var body={
  "id": 1,
  "deleted_at": null,
  "open_order": {
    "id": 16,
    "status": "open"}

var jsonBody = JSON.parse(body.open_order); //HERE THE ERROR NOW APPEARS BECAUSE THE STRING IS NOT A JSON OBJECT YET!!!! 
//TODO SO
var jsonBody=JSON.parse(body)//PASS THE BODY FIRST THEN LATER USE THE jsonBody to get the open_order

var OpenOrder=jsonBody.open_order;

Jawaban bagus di atas


1

Jawaban ini jika untuk orang-orang yang menghadapi kesalahan ini saat bekerja dengan File Upload ..

Kami menggunakan middleware untuk enkripsi berbasis token - dekripsi dan kami menemukan kesalahan yang sama.

Berikut ini adalah kode kami dalam file rute:

  router.route("/uploadVideoMessage")
  .post(
    middleware.checkToken,
    upload.single("video_file"),
    videoMessageController.uploadVideoMessage
  );

di sini kami memanggil middleware sebelum mengunggah fungsi dan itu menyebabkan kesalahan. Jadi ketika kami mengubahnya menjadi ini, itu berhasil.

router.route("/uploadVideoMessage")
  .post(
    upload.single("video_file"),
    middleware.checkToken,
    videoMessageController.uploadVideoMessage
  );

0

Ini bukan tugas yang sulit. Masalah itu juga terjadi di situs saya Anda harus menggeser file js Anda urutan teratas. Karena di tempat Anda menggunakan Parsing JSON, kali ini file JS Anda tidak dimuat. CONTOH #

<script type="text/javaScript">
...........SOME CODE.............
</script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>

mengubah

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script type="text/javaScript">
...........SOME CODE.............
</script>

0

Nah, untuk semua yang sebenarnya tidak dapat menemukan kesalahan di mana pun dalam kode Anda, tidak ada "tidak terdefinisi seperti yang dikatakan di penyimpanan lokal atau nol" .. cukup hanya komentar kode Anda dan tulis satu lagi yang benar-benar menghapus item dalam penyimpanan lokal. .setelah itu, Anda dapat berkomentar atau menghapus kode saat ini dan mengatur ulang lagi kode sebelumnya hanya dengan menghapus tanda komentar (jika Anda tidak menghapus ... jika Anda dapat menulisnya lagi :))

LocalStorage.setItem('Previous' , "removeprevious");  


LocalStorage.removeItem('Previous');   
 Console.log(LocalStorage.getItem('Previous'));

Konsol akan menunjukkan nol dan bahwa .. reset kode Anda lagi jika t tidak berfungsi, kawan! Anda mendapat kesalahan.

maaf untuk bahasa inggris saya!


-3

Saya mendapatkan kesalahan ini, ketika saya menggunakan variabel yang sama untuk string json dan parsed json:

var json = '{"1":{"url":"somesite1","poster":"1.png","title":"site title"},"2":{"url":"somesite2","poster":"2.jpg","title":"site 2 title"}}'

function usingjson(){
    var json = JSON.parse(json);
}

Saya mengubah fungsi menjadi:

function usingjson(){
    var j = JSON.parse(json);
}

Sekarang kesalahan ini hilang.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.