我正在使用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;
}
但我不知道如何让它自动更深入,无论级别多少。 有人能指出我正确的方向吗? 任何帮助将不胜感激! 10X
答案 0 :(得分:5)
定义打印功能
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"