2013-08-26 72 views
0

假设响应为{"errmsg":"Error_BB"}{"msg":"I am BB"}无法获取定义的密钥

var jsonparsed = JSON.parse(response);// OK, It works 

var key = Object.getOwnPropertyNames(jsonparsed);// key can be msg or errmsg, OK, It works 

if("errmsg" == key) 
    { 
     throw ("Error says:"+jsonparsed.key); //It cannot work but if jsonparsed.errmsg, it works 
    } 
else 
    { 
     alert("Data says:"+jsonparsed.key); //It cannot work but if jsonparsed. msg, it works 
    } 

我得到这样的警告:

错误说值不确定

这是为什么,因为关键似乎定义为比较条件才能确定。

我无法抛出或产生警报消息。但是,如果密钥被替换为errmsg或msg,如注释中所示。

+0

什么是关键的具体内容?这不应该是一个数组? –

回答

0

好,jsonparsed不有财产key,是吗?正如你所说,它有errmsgmsg。所以jsonparsed.keyundefined并不奇怪。

如果您要访问其名称包含在一个变量的属性,你必须使用括号标记

obj[prop] 

但是,还有更多:Object.getOwnPropertyNames返回属性名称的阵列。虽然"errmsg" == key可能因为隐式类型强制的工作,你真的想要得到数组的第一个元素:

var key = Object.getOwnPropertyNames(jsonparsed)[0]; // get first element 

if("errmsg" === key) { 
    throw ("Error says:"+jsonparsed[key]); 
} 
else { 
    alert("Data says:"+jsonparsed[key]); 
} 
0

使用表达式jsonparsed.key您需要在jsonparsed对象处寻找名为"key"的属性。

检索其名称是VAR值的键,你可以使用类似数组的表示法:

throw ("Error says:"+jsonparsed[key]); 

或使用eval函数:

throw ("Error says:"+eval("jsonparsed."+key));