2013-08-26 75 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));