【问题标题】:How to iterate through all keys & values of nested object?如何遍历嵌套对象的所有键和值?
【发布时间】:2014-09-23 15:51:38
【问题描述】:

我正在用 javascript 开发一个 Web 应用程序(在服务器端和客户端)。我将数据作为 json 来回发送,我希望能够在另一端解析它。问题是我里面有几个层次的嵌套对象,所以这就是我卡住的地方。例如,我正在发送以下数据:

var data = {};
data.title = "My Title";
data.metric = {
   fact : "Malicious code detected",
   technique : "XSS"
};
data.subject = {
   userType : "ADMIN",
   userName : "Jack",
   clientNumber : "000",
   terminal : "192.168.1.1"
};
data.context = {
   environment : {
      session : "00",
      hostname : "mainServer",
      sysType : "production"
   },
   resource : {
      wpt : "DIA",
      pid : "1024"
   }
};

另一方面,当我收到它时,我只想能够完全循环通过这个对象,并打印它的内容。我在stackoverflow上看到了很多类似的问题,但没有一个有帮助。这是我到目前为止所做的:

function display(data) {
    var resp = "";
    var prop = null;
    var dataJSON = JSON.parse(data);

    for (prop in dataJSON) {
        if (patternJSON.hasOwnProperty(prop)) {
            resp += "obj" + "." + prop + " = " + dataJSON[prop] + "\n";
        }
    }
    return resp;
}

但我不知道如何让它自动更深,无论级别数如何。 有人可以指出我正确的方向吗? 任何帮助将不胜感激! 10 倍

【问题讨论】:

  • 我已经看过这篇文章了,对我来说情况不一样,我不想在我的 json 对象中寻找特定的东西。目前我只想将它打印到控制台以确保它正常工作,但稍后所有这些字段都会转到数据库中的某些表。
  • 该答案显示了您如何遍历嵌套对象,这就是您的问题所在。修改代码以满足您的其他要求。
  • 像 JSON.stringify(obj) 这样的东西好吗?它没有被格式化,但它会打印出所有对象的内容。

标签: javascript json parsing


【解决方案1】:

定义打印函数

function print(obj, prefix) {
  prefix = prefix || 'obj';
  return Object.keys(obj).reduce(function(acc, key){
      var value = obj[key];
      if(typeof value === 'object') { 
          acc.push.apply(acc, print(value, prefix + '.' + key));
      }
      else { 
          acc.push(prefix + '.' + key + ' = ' + value);
      }
      return acc;
  }, []);
}

并像这样使用它print(data).join('\n')

"obj.title = My Title
obj.metric.fact = Malicious code detected
obj.metric.technique = XSS
obj.subject.userType = ADMIN
obj.subject.userName = Jack
obj.subject.clientNumber = 000
obj.subject.terminal = 192.168.1.1
obj.context.environment.session = 00
obj.context.environment.hostname = mainServer
obj.context.environment.sysType = production
obj.context.resource.wpt = DIA
obj.context.resource.pid = 1024"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 2014-01-29
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多