比较;“关键”;javascript元组中的值
我使用关联数组创建json对象,序列化并将其发送给第三方:比较;“关键”;javascript元组中的值,javascript,json,Javascript,Json,我使用关联数组创建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_
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”]值
在问题的答案中,假设JSON对象具有一组给定的属性,直到对嵌套的属性进行迭代 JavaScript中的对象没有“键顺序”,因此不存在“第一个元素” 考虑到这一点,如果密钥存在,则存在以下两个用于测试的选项:
if( MSG['DONE'] in json_obj)
// or...
if( json_obj.hasOwnProperty(MSG['DONE']))
在现代浏览器(IE9+、FF4+、Chrome5+、Opera12+、Safari5+)中,您可以使用内置的Object.keys方法:
var keys = Object.keys(json_obj);
if (json_obj[keys[0]] === MSG["DONE"]) { ... }
这回答了你的问题吗?是否要将第一个json_obj属性的值与MSG[“DONE”]的值进行比较?还是我误解了你的问题
另外,我尝试了Object.keys()方法,它按照键在对象中列出的顺序返回键,但我不确定这是否可以保证。可能的重复:我不认为
{MSG[“SESSION_START”]:SESSION_id}
是有效的JavaScript。首先,您只使用JavaScript对象。JSON是字符串的一种格式。正因为如此,我觉得你想得太多了。只需设置一个断点并检查json_obj
上有什么。您可能只需要使用json_obj['DONE']
…JavaScript本身没有“元组”。您还可以使用MSG.SESSION\u START
而不是MSG[“SESSION\u START”]
。要将变量值用作键,您需要执行以下操作:var MSG\u tuple={};msg_tuple[msg[“SESSION_START”]]=SESSION_id代码>。然而,在ES6中,您可以这样做:var msg_tuple={[msg[“SESSION_START”]]:SESSION_id}
尽管如此,如果出于某种原因您不知道密钥的名称,您可以这样做:Object.keys(json_obj)[0]
如果元组中的第二个项也具有值0x0000,而第一个项具有不同的值,那么会发生什么行为?