我需要解析一个放在文件中的json并确定它的结构,下面是我尝试这样做的代码。
var fs = require('fs')
var reqTemplate;
var obj;
fs.readFile('SampleData.js', 'utf8', function (err, data) {
if (err) {
return console.log(err);
}
reqTemplate = data;
console.log('\nRequestTemplate:\n\n%s\n', reqTemplate);
obj = JSON.parse(reqTemplate);
var i = 0;
console.log(Object.keys(obj));
Object.keys(obj).forEach(function (key) {
i++;
console.log;
console.log(key);
console.log(obj[key]);
});
});我得到的输出是:
{
"AuthenticateUserReq": {
"Tid": "123",
"username": "131329",
"password": "Vinod",
"SessionTokenId": "",
"DeviceInfo": {
"DeviceName": "ABC",
"DeviceVersion": "X",
"UniqueDeviceID": "ZZZ",
"Platform": "AND"
}
}
}我能够获得父键及其值。
我陷入了如何识别子键和检索它的值的问题上。
PS:我不知道json响应的结构。我需要识别根键和它的值,以及子键和它们的值。
任何帮助都将不胜感激。
发布于 2012-12-27 19:11:03
对于tree traversal,您将需要递归
var callback = console.log;
function traverse(obj) {
if (obj instanceof Array) {
for (var i=0; i<obj.length; i++) {
if (typeof obj[i] == "object" && obj[i]) {
callback(i);
traverse(obj[i]);
} else {
callback(i, obj[i])
}
}
} else {
for (var prop in obj) {
if (typeof obj[prop] == "object" && obj[prop]) {
callback(prop);
traverse(obj[prop]);
} else {
callback(prop, obj[prop]);
}
}
}
}
traverse( JSON.parse(reqTemplate) );发布于 2012-12-28 22:15:07
可能还想尝试使用Node traverse - https://github.com/substack/js-traverse。允许递归遍历JSON树以获取每个带有上下文的键值对(例如:跟踪父项),并且可以在遍历树时运行map/reduce。非常强大。
发布于 2012-12-27 19:24:41
当您解析JSON时,您会得到一个普通的JS对象。您可以使用var keysOfObject = Object.keys(object);获取其密钥。然后,您可以使用这些键来获取值。
https://stackoverflow.com/questions/14053509
复制相似问题