2012-10-23 32 views
206

Otrzymuję ten błąd "Uncaught syntaxerror nieoczekiwany token U", gdy uruchamiam moją stronę w chrome. I w firefox dostaję, "JSON.parse: nieoczekiwany charakter". Zwracam dane json z pliku php, a zwracany ciąg jsonów jest poprawny. Sprawdziłem to pod numerem http://jsonlint.com/. Każda pomoc będzie doceniona ... Dzięki.uncaught syntaxerror nieoczekiwany token U JSON

Oto wrócił JSON ciąg

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

Czy możesz opublikować JSON? Kiedy dostaję ten błąd, zwykle gwa- rantuje, że istnieje nie zakończony łańcuch - wskazuje, że znajduje się on w literie "U" w JSON. –

+0

Może być jakiś dziwny problem z '' \ "' 'na wyjściu –

+0

Że JSON parsuje dobrze.Należy spróbować dowiedzieć się, co twój kod faktycznie się dławi – nneonneo

Odpowiedz

474

Błąd ten jest zazwyczaj postrzegane, gdy wartość podana do JSON.parse jest rzeczywiście undefined. Sprawdziłbym kod, który próbuje to sparsować - najprawdopodobniej nie analizujesz aktualnie wyświetlanego łańcucha.

+1

Dobra rozmowa! Widziałem to wcześniej .. –

+14

Może to być również '" undefined "' jako ciąg zamiast literału 'undefined' .Czy właśnie spędziłem 30 minut na znajdowaniu tego. –

+7

@ ns47731 To jest właściwie to samo. Powód, dla którego nieokreślony staje się' u' , jest to, że 'undefined' jest wymuszony na ciąg znaków (ponieważ ciąg znaków jest tym, czego JSON.parse oczekuje) . –

11

Otrzymałem tę wiadomość podczas sprawdzania poprawności (w projekcie MVC). Dla mnie dodanie elementu ValidationMessageFor rozwiązało problem.

Aby być precyzyjnym, numer linii 43 w jquery.validate.unobtrusive.js spowodował problem:

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

To dostarczyło mi właściwej ścieżki; w moim przypadku robiłem '$ (" form: input "). valid();' aby wywołać walidację. Ale najwyraźniej dostał błąd na ukrytym polu bez ValidationMessageFor. Naprawiono przez zmianę na '$ (" form: input: visible "). Valid();' – Trax72

5

najczęstszym przypadku tego błędu dzieje się przy użyciu szablonu, który jest generowanie kontrolę następnie zmienia sposób id i/lub name są generowane przez „nadrzędny” domyślnym szablonie z czymś

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

a następnie zapominając zmienić ValidationMessageFor do

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

Mam nadzieję, że to zaoszczędzi ci trochę czasu.

1

W moim przypadku próbował wywołać JSON.parse() na zmiennej AJAX przed powrotem XHRResponse. EG:

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

Wymieniłem że na przykładzie wyjścia z jQuery site for $.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> 
-2

nie rozczarować zrobił u zrozumieć

np jest to, że powiedzmy mam ciąg JSON ..NOT JESZCZE JSON OBIEKT LUB ARRAY.

więc jeśli w JavaScript u przeanalizować ciągu jako

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; 

Wielkich odpowiedzi powyżej

0

To nie jest trudnym zadaniem. Ten problem występuje również na mojej stronie, powinieneś przesunąć swoje najlepsze pliki js. Ponieważ w miejscu, w którym używasz Parsowania JSON, tym razem pliki JS nie są ładowane. Przykład #

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

zmiana

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

przeżyłem ten błąd, gdy wpadłem warunku znajdowania na JSONArray wewnątrz pętli for. Problem, z którym miałem do czynienia był wynikiem jednej z wartości zwracanej wartości null pętli for. Dlatego też, gdy próbowałem uzyskać dostęp do nieruchomości, nie udało się.

Więc jeśli robisz coś w JSONArrays, gdzie nie jesteś pewien źródła danych i jego integralności, myślę, że jest to dobry nawyk radzenia sobie z nieważnymi i nieokreślonymi wyjątkami w tym przypadku.

Naprawiłem to poprzez sprawdzenie zerowej wartości zwracanej wartości find na JSONArray i odpowiednie potraktowanie wyjątków.

Pomyślałem, że to może pomóc.

-1

rozważyć użycie

eval("("+your_json_var+")"); 

To znacznie lepsze niż $ .parseJSON()

-1

ja otrzymuję ten błąd, kiedy stosując tę ​​samą zmienną dla json ciąg i analizowany 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); 
} 

Zmieniłem funkcję na:

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

Ten błąd zniknął.

Powiązane problemy