2016-07-07 7 views
-1

ich assoziatives Array bin mit JSON-Objekte zu erstellen, serialisiert und sie an einen Dritten senden:Vergleich „Schlüssel“ Werte in Javascript Tupeln

var MSG = {} 
MSG["SESSION_START"] = 0x0000; 
MSG["DONE"]   = 0x0001; 

var session_id = gen_rand_no(); 
var msg_tuple = {MSG["SESSION_START"] : session_id}; 
var json_msg_tuple = JSON.stringify(msg_tuple); 

send(json_msg_tuple); 

Die Partei würde normalerweise mit einer Bestätigungsnachricht in einer Form antworten ein serialisierten JSON-Objekt:

var serialized_json = recv(); 
var json_obj = JSON.parse(serialized_json); 

Wie kann ich überprüfen, ob das erste Element im JSON-Objekt mit dem MSG entspricht [ „DONE“] Wert?

In der Antwort this Frage wird angenommen, dass das JSON-Objekt eine bestimmte Menge von Attributen hat, bis die verschachtelten Einsen wiederholt werden.

+0

Wahrscheinliche Betrogene: http://StackOverflow.com/Questions/909003/JavaScript-Getting-the-first-Index-of-an-Object –

+3

Ich denke nicht '{MSG [" SESSION_START "]: session_id} 'ist gültiges JavaScript. –

+0

Zuerst verwenden Sie nur JavaScript-Objekte. JSON ist ein Format für Strings. Deswegen denke ich, dass du das überschätzt. Setzen Sie einfach einen Haltepunkt und prüfen Sie, was 'json_obj' darauf hat. Sie können wahrscheinlich einfach 'json_obj ['DONE']' ... –

Antwort

2

Objekte in JavaScript haben keine "Schlüsselreihenfolge", daher gibt es kein "erstes Element".

Vor diesem Hintergrund werden die folgenden zwei Möglichkeiten gibt es für die Prüfung, ob der Schlüssel vorhanden ist:

if(MSG['DONE'] in json_obj) 
// or... 
if(json_obj.hasOwnProperty(MSG['DONE'])) 
+0

Wenn Sie den Namen des Schlüssels aus irgendeinem Grund nicht kennen, können Sie dies tun: ' Object.keys (json_obj) [0] ' –

+0

Was wäre das Verhalten, wenn das zweite Element im Tupel auch den Wert 0x0000 und das erste ein eindeutiger Wert hätte? – Sebi

2

In modernen Browsern (IE9 +, FF4 +, Chrome5 +, Opera12 +, Safari5 +) Sie das in Objekt gebaut nutzen könnten. Tastenmethode:

var keys = Object.keys(json_obj); 
if (json_obj[keys[0]] === MSG["DONE"]) { ... } 

Beantwortet das Ihre Frage? Ist es der Wert des ersten json_obj-Attributs, das Sie mit dem Wert von MSG ["DONE"] vergleichen möchten? Oder habe ich deine Frage falsch verstanden?

P.S. Ich habe die Methode Object.keys() ausprobiert und gibt die Schlüssel in der Reihenfolge zurück, in der sie im Objekt aufgelistet sind, aber ich bin mir nicht sicher, ob das garantiert ist.