2016-07-07 126 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()方法,它按照它们在对象中列出的顺序返回键,但我不确定这是否有保证。