我发现从JSON对象的名称获取String名称存在问题。 我需要解析这种来自服务器的JSON响应。
var response = {
hopaopGmailsjIpW: {
GmailsjIpW_totalEmails_count: 133,
GmailsjIpW_state: 1
},
hopaopGmail4y4yu: {
Gmail4y4yu_totalEmails_count: 156,
Gmail4y4yu_state: 1
}
}
它不是Array
,而是具有内部对象的对象。
我需要解析内部对象名称并为每个对象添加其他值。
我希望能够做到这样的事情:
for(var i =0; i < response.length; i++){
response[i].username = parseUsernameFromString(response[i]);
response[i].service = parseServiceFromString(response[i]);
response[i].id = parseIdString(response[i]);
}
(并且还说明每项任务)
所以问题是: 制作它的最佳方式是什么?
更新 这正是我现在所拥有的:
for(var key in response){
if(stringContains(response[key], "Gmail")) { response[key].service = "Gmail";}
console.log("task name: "+ response[key].service);
}
function stringContains(originalString, searchString){
if(originalString.indexOf(searchString) > -1){
return true
}
else return false;
}
答案 0 :(得分:2)
要浏览对象,您需要使用for ... in
循环。
真正的问题是:您的代码中缺少,
。请参阅固定的工作代码段:
<强>段强>
var response_Parsed = {
hopaopGmailsjIpW: {
GmailsjIpW_totalEmails_count: 133,
GmailsjIpW_state: 1,
service: 'Gmail',
username: 'hopaop',
id: 'sjIpW'
},
hopaopGmail4y4yu: {
Gmail4y4yu_totalEmails_count: 156,
Gmail4y4yu_state: 1,
service: 'Gmail',
username: 'hopaop',
id: '4y4yu'
}
};
for (id in response_Parsed) {
console.log("----");
if (id.indexOf("Gmail") > -1) {
console.log("We have Gmail: " + id);
console.log("UniqueName: " + id.replace("hopaopGmail", ""));
console.log("Username: " + response_Parsed[id].username);
console.log("Email Count: " + response_Parsed[id][id.replace("hopaop", "") + "_totalEmails_count"]);
}
else
console.log("We don't have Gmail: " + id);
}
&#13;
通过使用Object.keys
来计算对象键的正确方法。
答案 1 :(得分:1)
如果响应是你写的字符串,你应该首先将JSON-String解析为一个Object(如果你正在使用类似jQuery的库,它可能已经是一个JSON,因为这个转换由jQuery自动完成):
var obj = JSON.parse(responseString);
之后你可以像上面发布的那样迭代它:
for (var key in obj) {
console.log("key", key, "value", obj[key]);
}