sintassi non rilevata token imprevisto U JSON


294

Ottengo questo errore "sintassi non rilevata token imprevisto U" quando eseguo la mia pagina in Chrome. E in Firefox ottengo "JSON.parse: carattere inaspettato". Sto restituendo i dati json da un file php e la stringa json di ritorno è valida. L'ho controllato con http://jsonlint.com/ . Qualsiasi aiuto sarebbe apprezzato ... Grazie.

Ecco la stringa JSON restituita

[
    ["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"]
]

Puoi pubblicare il JSON? Quando ricevo questo errore, in genere viene a sapere che esiste una stringa non terminata: ciò indica che si trova sulla lettera "U" in JSON.
Kyle Burton,

Potrebbe esserci uno strano problema con \"l'output.
Felix Kling,

Che JSON analizza bene. Dovresti provare a capire su cosa sta soffocando il tuo codice.
nneonneo,

Risposte:


647

Tale errore viene normalmente visualizzato quando il valore assegnato JSON.parseè effettivamente undefined. Quindi, vorrei controllare il codice che sta cercando di analizzare questo - molto probabilmente non stai analizzando la stringa effettiva mostrata qui.


27
Potrebbe anche essere "undefined"una stringa anziché il letterale undefined. Ho appena trascorso 30 minuti per scoprirlo.
ug_

13
@ ns47731 Questo è in realtà lo stesso. Il motivo per cui un vero indefinito diventa u, è che undefinedè costretto in una stringa (perché una stringa è ciò che JSON.parse si aspetta).
Sean Kinsey,

10
Ugh, inviava una richiesta asincrona e cercava immediatamente di analizzare il ritorno indefinito. Disgustato di me stesso, grazie.
Chris Trudeau,

7
Questo errore verrebbe anche lanciato attraverso un UTF-8 {"all'inizio della stringa json
metamagikum

1
Il mio errore era Unexpected token N in JSON at position...e il problema era un doublevalore:NaN
Jaider,

14

Stavo ricevendo questo messaggio durante la convalida (nel progetto MVC). Per me, l'aggiunta dell'elemento ValidationMessageFor ha risolto il problema.

Per essere precisi, il numero di riga 43 in jquery.validate.unobtrusive.js ha causato il problema:

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

Questo mi ha portato sulla strada giusta; nel mio caso stavo facendo $("form :input").valid();per attivare la convalida. Ma a quanto pare ha avuto un errore su un campo nascosto senza ValidationMessageFor. Risolto cambiando in$("form :input:visible").valid();
Trax72 il

7

Il parametro per JSON.parse potrebbe non restituire nulla (ovvero il valore fornito per JSON.parse è undefined)!

Mi è successo mentre stavo analizzando il codice di solidità compilato da un 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;

che è stato scritto male come

JSON.parse(xyz.intereface)

che non stava restituendo niente!


5

Il caso più comune di questo errore si verifica quando si utilizza un modello che genera il controllo, quindi cambia il modo ide / o namesi genera generando il modello predefinito "override" con qualcosa di simile

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

e poi dimenticare di passare ValidationMessageFora

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

Spero che questo ti faccia risparmiare un po 'di tempo.


3

Ho riscontrato questo errore quando ho eseguito una condizione di ricerca su un JSONArray all'interno di un ciclo for. Il problema che ho riscontrato è stato il risultato di uno dei valori nel ciclo for che restituisce null. Quindi, quando ho provato ad accedere a una proprietà su questo non è riuscito.

Quindi, se stai facendo qualcosa all'interno di JSONArrays in cui non sei sicuro dell'origine dei dati e della sua integrità, penso che sia una buona abitudine trattare le eccezioni nulle e indefinite in questo caso.

L'ho risolto controllando null sul valore restituito di find su JSONArray e gestendo le eccezioni in modo appropriato.

Ho pensato che questo potesse aiutare.


1

Nel mio caso stava provando a chiamare JSON.parse () su una variabile AJAX prima che XHRResponse tornasse. PER ESEMPIO:

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

L'ho sostituito con un esempio dal sito jQuery per $ .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

Se non capissi

Ad esempio, è per dire che ho una STRINGA JSON .. NON ANCORA UN OGGETTO O ARRAY JSON.

quindi se in javascript analizzi la stringa come

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;

Grandi risposte sopra


1

Questa risposta è per le persone che si trovano ad affrontare questo errore mentre lavorano con Caricamento file .

Stavamo usando il middleware per la crittografia basata su token - decodifica e abbiamo riscontrato lo stesso errore.

Di seguito è stato riportato il nostro codice nel file di route:

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

qui stavamo chiamando il middleware prima della funzione di upload e questo causava l'errore. Quindi, quando l'abbiamo cambiato in questo, ha funzionato.

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

0

Questo non è un compito difficile. Questo problema si verifica anche sul mio sito, dovresti spostare i tuoi file js in ordine superiore. Perché nel punto in cui si utilizza JSON Parsing, questa volta i file JS non vengono caricati. ESEMPIO #

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

cambia in

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

0

Bene, a tutti coloro che in realtà non riescono a trovare l'errore da nessuna parte nel codice, né "indefinito come dice nella memoria locale né null" .. basta semplicemente commentare il codice e scriverne un altro che rimuove effettivamente l'elemento nella memoria locale. .Dopo quello, puoi commentare o cancellare il codice corrente e resettare di nuovo il precedente semplicemente decommentandolo (se non lo elimini ... se lo hai fatto puoi scriverlo di nuovo :))

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


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

La console mostrerà null e ... ripristina nuovamente il codice se t non funziona, amico! Hai errori.

mi scusi per il mio inglese!


-3

Stavo ottenendo questo errore, quando stavo usando la stessa variabile per json string e json analizzato:

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);
}

Ho cambiato funzione in:

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

Ora questo errore è andato via.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.