2016-07-25 4 views
1

ich diesen Fehler unten in diesem Code-Block erhalte:unerwartetes Token o in JSON an Position 1

function openWebsocket(url) { 
    var ws; 
    ws = $websocket(url); 
    ws.onOpen(function(event) { 
     console.log(' Websocket connection established:', event); 
    }); 
    ws.onMessage(function(message) { 
     var userObj = UserFactory.getUserObject(); 
     var settings = userObj.alert_settings; 

     // The JSON parsing... 
     var parsedMsg = JSON.parse(message.data); 
     var alert  = JSON.parse(parsedMsg); 
     var date  = new Date(parseFloat(alert.start_epoch+'000')); 
     alert.hour = date.getHours() +':'+date.getMinutes(); 
     alert.percent_change = Math.round(alert.percent_change); 

     var shouldPush = main_alert_filter(settings, alert); 
     updateFeed(alerts, shouldPush, alert); 
    }); 
} 

Ich habe an beide Parsing JSON giving "unexpected token o" error und I keep getting "Uncaught SyntaxError: Unexpected token o" sieht

jedoch weder Antwort geholfen. Weil, wenn ich zuerst JSON.parse (message.data) starte, bekomme ich einen String zurück, kein Objekt. Also muss ich JSON.parse erneut ausführen, um endlich ein echtes Objekt zurück zu bekommen.

enter image description here

Dies ist, was message.data wie folgt aussieht:

" "{\"term\": \"\\\"nike\\\"\", \"percent_change\": 125, \"hour\": \"10:9\", \"term_id\": 2890413, \"start_epoch\": 1420474140, \"term_trend_id\": 793950, \"end_epoch\": 1420477740, \"formatted_date_difference\": \"January 5, 2015\", \"tickers\": [\"NKE\", \"$PUM\", \"ADDYY\", \"LULU\", \"UA\", \"HIBB\"], \"twitter_preview\": \"\", \"type\": \"spike\", \"approved\": 1, \"search_preview\": [\"\"]}" "

nun nach dem ersten Parsing parsedMsg ist eine Zeichenfolge, die wie folgt aussieht:

{"term": "minimum wage +increase", "percent_change": 729, "hour": "9:14", "term_id": 2522115, "start_epoch": 1447168440, "term_trend_id": 657898, "end_epoch": 1447175700, "formatted_date_difference": "November 10, 2015", "tickers": ["$JAB", "$SLCY", "AAL", "AAPL", "ABCD", "ABTL", "ADDYY", "ADM", "AEO", "AFCO", "AHC"......

Schließlich muss ich ein tatsächliches Objekt, so habe ich JSON.parse laufen wieder, dieses zu erhalten:

Object {term: "minimum wage +increase", percent_change: 729, hour: "9:14", term_id: 2522115, start_epoch: 1447168440…}

andere Sache zu beachten, erhalte ich nie diesen Fehler, wenn ich Schreiten durch in Chrome. Es passiert nur, wenn ich den Haltepunkt nicht gesetzt habe. Könnte es sich um ein Problem mit dem Race-Condition-Typ handeln? Wie es versucht, JSON.parse etwas, das nicht bereit ist, analysiert zu werden?


UPDATE

Ok so manchmal ist die JSON ungültig scheinbar und manchmal nicht, so weit ich ohne Fehler mit dem folgenden Ausschnitt gut mache, Gedanken?

if (typeof alert === 'object') { 
    // do nothing... 
} else { 
    var alert = JSON.parse(alert); 
} 

Die meiste Zeit das alert Ergebnis JSON.parse(message.data) ist ein string so muss ich die anderen Kontroll es verdoppeln zu analysieren.

+0

Wenn ich 'JSON.parse (...)' Ihre erste Zeichenfolge (nun, eine gültige Teilmenge davon), bekomme ich das endgültige Objekt, nicht die Zwischenzeichenfolge, die Sie angeblich erhalten. Wenn ich * dieses * Objekt parse, bekomme ich den Fehler, den du bekommst ... – seairth

+0

dein 'parse' JSON ist unvollständig! Bitte teilen Sie das volle JSON-Ergebnis, damit wir den Fehler finden können. –

+0

Tut mir leid, es ist komplett, es ist einfach super riesig und ich wollte das Ganze nicht posten. –

Antwort

1

Die JSON-String Sie mit message.data angegeben ist kein gut ausgebildet JSON als String analysiert. Es kann sein, dass der Server Ihnen während/nach dem Verbindungsaufbau eine mehrteilige Nachricht sendet.

Ich schlage vor, Sie drucken das Nachrichtenobjekt erhalten in OnMessage Funktion und analysieren, ob sie vollständig gültige JSON Strings sind.

+0

Nur meine Frage mit meinem vollen' message.data' JSON aktualisiert –

0

Es sieht aus wie Ihre message.data ist unvollständig.

Werfen Sie einen Blick auf die Bibliotheksdokumente, die Sie verwenden, vielleicht sollten Sie die Daten bis zum Ende sammeln? Vielleicht gibt es eine OnEnd-Methode?

+0

Tut mir leid, es ist komplett, nur super riesig, also wollte ich nicht den gesamten JSON posten, aber ich kann es, wenn es sein muss –

+0

Haben Sie versucht, die Antwort in der Inspektor-Konsole zu analysieren? IMO ist es nicht möglich, dass Sie es zweimal analysieren sollten:) Vielleicht gibt es einige fehlerhafte Daten, wie Unescaped ** "** fe. –

+0

@MarcinBogusz: Sicher ist es möglich, wenn die ursprünglichen JSON-Daten doppelt angegeben wurden. Zum Beispiel: 'JSON.stringify (JSON.stringify ({" foo ":" bar "}))'. Das gibt Ihnen diese Zeichenfolge: '" {\ "foo \": \ "bar \"} "'. (Die äußeren Anführungszeichen sind hier _Teil des Strings_, nicht Anführungszeichen _enclosing_ des Strings.) Parsen, das einmal den String (nicht Objekt) liefert '{" foo ":" bar "}'; Parsing ein zweites Mal gibt das ursprüngliche Objekt '{foo:" bar "}'. –

2

Warum würden Sie parse Ihr json zweites Mal, es wurde bereits im ersten Versuch analysiert.

Haben Sie einen Blick auf die Snippet

var obj = "{\"term\": \"minimum wage +increase\", \"percent_change\": 729, \"hour\": \"9:14\", \"term_id\": 2522115, \"start_epoch\": 1447168440, \"term_trend_id\": 657898, \"end_epoch\": 1447175700, \"formatted_date_difference\": \"November 10, 2015\", \"tickers\": [\"$JAB\", \"$SLCY\", \"AAL\", \"AAPL\", \"ABCD\", \"ABTL\", \"ADDYY\"]}"; 
 
$(function(){ 
 
    var data = JSON.parse(obj); 
 
    alert(typeof data); 
 
    console.log(data.tickers[0] +" -> an item in `tickers` array"); 
 
    console.log(data.tickers); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Ich musste es ein zweites Mal analysieren, weil das erste Mal durch es war immer noch 'typeof string' So bekam ich einen Fehler auf 'alert.user' kann den Benutzer nicht auf String setzen. –

+0

@LeonGaban sein Typ ist 'Objekt' Überprüfen Sie das aktualisierte 'Ausschnitt' Sie können auf alles im Objekt zugreifen, auch einmal Zeichenfolge wird analysiert, um json Objekt geparst, keine Notwendigkeit zum zweiten Mal zu analysieren, wenn Sie noch ein Problem haben, können Sie zeigen uns das ganze Objekt. Hoffe, das hilft :) –

+0

Überprüfen Sie Ihre Browser-Konsole, können Sie Ihre Antwort finden, und Sie werden Ihre erste formatierte Json-Objekt gut verstehen ... Werfen Sie einen Blick darauf. Danke –