yakalanmamış sözdizimi hatası beklenmeyen simge U JSON


295

Sayfamı chrome'da çalıştırdığımda bu hatayı "yakalanmamış sözdizimi beklenmeyen simge U" olarak alıyorum. Ve firefox'ta "JSON.parse: beklenmedik karakter" elde ediyorum. Ben bir php dosyasından json veri döndürüyorum ve dönen json dize geçerlidir. İle kontrol ettimHttp://jsonlint.com/ . Herhangi bir yardım mutluluk duyacağız ... Teşekkürler.

Döndürülen JSON dizesi

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

JSON gönderebilir misiniz? Bu hatayı aldığımda, genellikle sonlandırılmamış bir dize olduğunu belirtiyor - JSON'daki 'U' harfinde olduğunu gösteriyor.
Kyle Burton

\"Çıktı ile ilgili garip bir sorun olabilir .
Felix Kling

JSON iyi ayrışıyor. Kodunuzun gerçekte ne boğduğunu anlamaya çalışmalısınız.
nneonneo

Yanıtlar:


648

Bu hata normalde verilen değer JSON.parsegerçekten olduğunda görülür undefined. Yani, bunu ayrıştırmaya çalışan kodu kontrol ediyorum - büyük olasılıkla burada gösterilen gerçek dize ayrıştırmıyorsunuz.


27
"undefined"Değişmez bir dize olarak da olabilir undefined. Bunu bulmak için sadece 30 dakika harcadım.
ug_

13
@ ns47731 Bu aslında aynı. Tanımlanmamış gerçek olmasının nedeni u, undefinedbir dizeye zorlanmış olmasıdır (çünkü bir dize JSON.parse'nin beklediği şeydir).
Sean Kinsey

10
Ugh, eşzamansız bir istek gönderiyordu ve hemen tanımsız getiriyi ayrıştırmaya çalışıyordu. Kendimi tiksinti için teşekkürler.
Chris Trudeau

7
Bu hata ayrıca, json dizesinin başında UTF-8 {"
yoluyla atılır

1
Benim Unexpected token N in JSON at position...doubleNaN
hatam

14

Bu mesajı doğrularken (MVC projesinde) alıyordum. Benim için ValidationMessageFor öğesi eklemek sorunu çözdü.

Kesin olmak gerekirse, jquery.validate.unobtrusive.js'deki 43 numaralı satır soruna neden oldu:

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

Bu beni doğru yola soktu; benim durumumda $("form :input").valid();doğrulamayı tetiklemek için çalışıyordum . Ama görünüşe göre ValidationMessageFor olmadan gizli bir alanda bir hata var. $("form :input:visible").valid();
Değiştirilerek

7

JSON.parse parametresi hiçbir şey döndürmüyor olabilir (yani JSON.parse için verilen değer undefined)!

Derlenmiş sağlamlık kodunu bir xyz.sol dosyasından ayrıştırırken başıma geldi.

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

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

export default i;

ki yanlış yazılmış

JSON.parse(xyz.intereface)

hangi hiçbir şey iade edildi!


5

Bu hatanın en yaygın durumu, denetimi oluşturan ve ardından yolu değiştiren idve / veya namevarsayılan şablonu 'geçersiz kılmak' ile üretilen şablonu kullanmaktır.

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

ve sonra değiştirmek için unutmak ValidationMessageForiçin

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

Umarım bu size biraz zaman kazandırır.


3

Bir for döngüsü içinde bir JSONArray üzerinde bulma koşulu çalıştırdığımda bu hatayı yaşadım. Karşılaştığım sorun null döndüren for döngüsü içindeki değerlerden birinin sonucuydu. Bu nedenle, bu konuda bir özelliğe erişmeye çalıştığımda başarısız oldu.

JSONArrays içinde veri kaynağından ve bütünlüğünden emin olmadığınız bir şey yapıyorsanız, bu durumda null ve tanımlanmamış istisnalarla başa çıkmak için iyi bir alışkanlık olduğunu düşünürüm.

Ben JSONArray üzerinde find döndürülen değeri null olup olmadığını denetleyerek ve özel durumlar uygun şekilde gidererek düzeltildi.

Bunun yardımcı olabileceğini düşündüm.


1

Benim durumumda, XHRResponse geri gelmeden önce bir AJAX değişkeni üzerinde JSON.parse () çağırmaya çalışıyordu. ÖRNEĞİN:

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

Ben $ .get için jQuery sitesi dışında bir örnek ile değiştirildi :

<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

Sadece anlamadım,

örneğin ben bir JSON STRING olduğunu söyleyelim .. bir JSON NESNESİ VEYA DİZİ DEĞİLDİR.

eğer javascript u olarak dizeyi ayrıştırmak

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;

Yukarıdaki harika cevaplar


1

Bu yanıt, Dosya Yükleme ile çalışırken bu hatayla karşılaşan insanlar içinse .

Belirteç tabanlı şifreleme - şifre çözme için ara katman yazılımı kullanıyorduk ve aynı hatayla karşılaştık.

Rota dosyasındaki kodumuz aşağıdadır:

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

burada yükleme fonksiyonundan önce ara katman yazılımı çağırıyorduk ve bu da hataya neden oluyordu. Bu şekilde bunu değiştirdiğimizde işe yaradı.

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

0

Bu zor bir görev değil. Bu sorun da sitemde js dosyalarınızı en üst sıraya kaydırmanız gerekir. Çünkü JSON Ayrıştırma kullandığınız yerde, bu sefer JS dosyalarınız yüklenmez. MİSAL #

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

değişmek

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

0

Aslında, kodunuzda herhangi bir hatayı bulamayan herkese, ne "yerel depolamada belirtildiği gibi tanımsız ne de boş" .. sadece kodunuzu yorumlayın ve öğeyi yerel depolamada kaldıran başka bir kod yazın. Bundan sonra, u mevcut kodu yorumlayabilir veya silebilir ve sadece birisini kaldırarak bir öncekini tekrar sıfırlayabilirsiniz (eğer u dint silerseniz t ... u tekrar yazdıysanız :))

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


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

Konsol null gösterir ve t işe yaramazsa kodunuzu tekrar sıfırlayın dostum! Hatalarınız var.

İngilizcem için üzgünüm!


-3

Ben json string ve parsed json için aynı değişkeni kullanırken bu hatayı alıyordum:

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

İşlevi şu şekilde değiştirdim:

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

Şimdi bu hata ortadan kalktı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.