从javascript对象

时间:2016-06-24 09:51:23

标签: javascript json

我发现从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;
}

2 个答案:

答案 0 :(得分:2)

要浏览对象,您需要使用for ... in循环。

真正的问题是:您的代码中缺少,。请参阅固定的工作代码段:

<强>段

&#13;
&#13;
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;
&#13;
&#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]);
}