2016-07-07 166 views
-1

我使用關聯數組創建JSON對象,序列化,並將其發送給第三方:比較「鍵」值

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

,該黨將通常與確認消息的形式回覆序列化JSON對象的:

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

如何檢查如果在JSON對象的第一個元素是對應於MSG [「DONE」]值?

this問題的答案中,假設JSON對象具有給定的一組屬性,直到嵌套的迭代結束。

+0

可能的欺騙:http://stackoverflow.com/questions/909003/javascript-getting-the-first-index-of-an-object –

+3

我不認爲'{MSG [「SESSION_START」]:session_id} '是有效的JavaScript。 –

+0

首先,您只是使用JavaScript對象。 JSON是字符串的格式。正因爲如此,我認爲你正在推翻這一點。只需設置一個斷點並檢查'json_obj'上面有什麼。你可以使用'json_obj ['DONE']'... –

回答

2

JavaScript中的對象沒有「按鍵順序」,所以沒有「第一個元素」這樣的事情。

考慮到這一點,以下兩個選項進行測試存在,如果項是否存在:

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

儘管如果由於某種原因不知道密鑰的名稱,您可以這樣做: Object.keys(json_obj)[0]' –

+0

如果元組中的第二項也將具有值0x0000,並且第一項具有不同的值,那麼行爲會是什麼? – Sebi

2

在現代瀏覽器(IE9 +,FF4 +,Chrome5 +,Opera12 +,Safari5 +),你可以使用內置的對象。鑰匙方法:

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

這是回答您的問題嗎?它是您想要與MSG [「DONE」]的值進行比較的第一個json_obj屬性的值嗎?或者我誤解了你的問題?

P.S.我嘗試了Object.keys()方法,它按照它們在對象中列出的順序返回鍵,但我不確定這是否有保證。