Ungefangener Syntaxfehler Unerwartetes Token U JSON

294

Ich erhalte die Fehlermeldung "Ungefangener Syntaxfehler unerwartetes Token U", wenn ich meine Seite in Chrome ausführe. Und in Firefox bekomme ich "JSON.parse: unerwarteter Charakter". Ich gebe die JSON-Daten aus einer PHP-Datei zurück und die zurückgegebene JSON-Zeichenfolge ist gültig. Ich habe es mit http://jsonlint.com/ überprüft . Jede Hilfe wäre dankbar ... Danke.

Hier ist die zurückgegebene JSON-Zeichenfolge

[
    ["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"]
]
kinath_ru
quelle
Können Sie den JSON posten? Wenn ich diesen Fehler erhalte, wird normalerweise festgestellt, dass eine nicht terminierte Zeichenfolge vorhanden ist. Dies zeigt an, dass sie sich im JSON am Buchstaben 'U' befindet.
Kyle Burton
Könnte ein seltsames Problem mit dem \"in der Ausgabe sein.
Felix Kling
Das JSON analysiert gut. Sie sollten versuchen herauszufinden, woran Ihr Code tatsächlich erstickt.
Nneonneo

Antworten:

647

Dieser Fehler tritt normalerweise auf, wenn der angegebene Wert JSON.parsetatsächlich ist undefined. Ich würde also den Code überprüfen, der versucht, dies zu analysieren - höchstwahrscheinlich analysieren Sie nicht die hier gezeigte tatsächliche Zeichenfolge.

Sean Kinsey
quelle
27
Es kann auch "undefined"eine Zeichenfolge anstelle des Literal sein undefined. Ich habe gerade 30 Minuten damit verbracht, das herauszufinden.
ug_
13
@ ns47731 Das ist eigentlich das gleiche. Der Grund, warum eine tatsächliche undefinierte wird u, ist, dass undefinedin eine Zeichenfolge gezwungen wird (weil eine Zeichenfolge das ist, was JSON.parse erwartet).
Sean Kinsey
10
Ugh, hat eine asynchrone Anfrage gesendet und sofort versucht, die undefinierte Rückgabe zu analysieren. Angewidert von mir, danke.
Chris Trudeau
7
Dieser Fehler würde auch durch ein UTF-8 {"am Anfang des json-Strings
geworfen
1
Mein Fehler war Unexpected token N in JSON at position...und das Problem war ein doubleWert:NaN
Jaider
14

Ich habe diese Nachricht während der Validierung erhalten (im MVC-Projekt). Durch Hinzufügen des ValidationMessageFor- Elements wurde das Problem behoben.

Um genau zu sein, verursachte die Zeilennummer 43 in jquery.validate.unobtrusive.js das Problem:

  replace = $.parseJSON(container.attr("data-valmsg-replace")) !== false;
user1412699
quelle
Das hat mich auf den richtigen Weg gebracht; In meinem Fall habe ich $("form :input").valid();die Validierung ausgelöst. Aber anscheinend hat es einen Fehler in einem versteckten Feld ohne ValidationMessageFor gegeben. $("form :input:visible").valid();
Behoben
7

Der Parameter für die JSON.parse gibt möglicherweise nichts zurück (dh der für die JSON.parse angegebene Wert ist undefined)!

Es ist mir passiert, als ich den kompilierten Soliditätscode aus einer xyz.sol-Datei analysiert habe.

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

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

export default i;

das wurde falsch geschrieben als

JSON.parse(xyz.intereface)

was nichts zurückgab!

Kartik Ganiga
quelle
5

Der häufigste Fall dieses Fehlers ist die Verwendung einer Vorlage, die das Steuerelement generiert idund dann die Art und Weise ändert und / oder namedurch "Überschreiben" der Standardvorlage mit so etwas wie generiert wird

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

und dann zu vergessen , zu ändern , ValidationMessageForum

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

Hoffe das spart dir etwas Zeit.

Matas Vaitkevicius
quelle
3

Dieser Fehler trat auf, als ich eine Suchbedingung auf einem JSONArray innerhalb einer for-Schleife ausführte. Das Problem, mit dem ich konfrontiert war, war das Ergebnis eines der Werte in der for-Schleife, die null zurückgaben. Als ich versuchte, auf eine Eigenschaft zuzugreifen, schlug dies fehl.

Wenn Sie also in JSONArrays etwas tun, bei dem Sie sich der Datenquelle und ihrer Integrität nicht sicher sind, ist es meiner Meinung nach eine gute Angewohnheit, in diesem Fall mit null und undefinierten Ausnahmen umzugehen.

Ich habe das Problem behoben, indem ich den zurückgegebenen Wert von find im JSONArray auf null überprüft und Ausnahmen entsprechend behandelt habe.

Ich dachte, das könnte helfen.

SD1985
quelle
1

In meinem Fall wurde versucht, JSON.parse () für eine AJAX-Variable aufzurufen, bevor die XHRResponse zurückkam. Z.B:

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

Ich habe das durch ein Beispiel aus der jQuery-Site für $ .get ersetzt :

<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>
delliottg
quelle
1

Nur für den Fall, dass du es nicht verstanden hast

Beispiel: Das heißt, ich habe einen JSON-STRING. NOCH KEIN JSON-OBJEKT ODER ARRAY.

Wenn Sie also in Javascript sind, analysieren Sie die Zeichenfolge als

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;

Tolle Antworten oben

Gutes Leben
quelle
1

Diese Antwort gilt für Personen, die bei der Arbeit mit File Upload auf diesen Fehler stoßen .

Wir haben Middleware für die tokenbasierte Verschlüsselung und Entschlüsselung verwendet und sind auf denselben Fehler gestoßen.

Es folgte unser Code in der Routendatei:

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

Hier haben wir Middleware vor der Upload-Funktion aufgerufen und das hat den Fehler verursacht. Als wir es geändert haben, hat es funktioniert.

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

Dies ist keine schwierige Aufgabe. Dieses Problem tritt auch auf meiner Website auf. Sie sollten Ihre JS-Dateien nach oben verschieben müssen. Denn an dem Ort, an dem Sie JSON-Parsing verwenden, werden Ihre JS-Dateien diesmal nicht geladen. BEISPIEL #

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

ändern

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

Nun, an alle, die den Fehler tatsächlich nirgendwo in Ihrem Code finden können, weder "undefiniert wie im lokalen Speicher angegeben noch null". Kommentieren Sie einfach Ihren Code aus und schreiben Sie einen anderen, der das Element tatsächlich im lokalen Speicher entfernt. Danach können Sie den aktuellen Code kommentieren oder löschen und den vorherigen Code erneut zurücksetzen, indem Sie ihn einfach auskommentieren (wenn Sie t nicht löschen ... wenn Sie dies getan haben, können Sie ihn erneut schreiben :)).

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


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

Die Konsole zeigt null an und setzt Ihren Code erneut zurück, wenn dies nicht funktioniert, Alter! Sie haben Fehler erhalten.

Entschuldigung für mein Englisch!

Nancy256
quelle
-3

Ich habe diesen Fehler erhalten, als ich dieselbe Variable für json string und parsed json verwendet habe:

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

Ich habe die Funktion geändert in:

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

Jetzt ging dieser Fehler weg.

user2605603
quelle