Javascript 解析nodejs中的json树

Javascript 解析nodejs中的json树,javascript,json,node.js,Javascript,Json,Node.js,我需要解析放在文件中的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('\nRequestT

我需要解析放在文件中的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响应的结构。我需要识别根键及其值,以及子键及其值


任何帮助都将不胜感激。

您需要递归:

var callback=console.log;
函数遍历(obj){
if(阵列的obj实例){

对于(var i=0;i当您解析JSON时,您会得到一个普通的JS对象。您可以通过使用
var keysOfObject=object.keys(object);
来获取其键。然后您可以使用这些键来获取值。

可能还希望尝试节点遍历-。允许递归遍历JSON树,以获取具有上下文的每个键值对(即:跟踪父对象),可以在遍历树时运行map/reduce。非常强大。

为什么需要手动迭代对象?您想要的对象不是简单的
JSON.parse(reqTemplate)吗
?@Cerbrus:这只是给了我全部的回答。我想得到各个键及其值。啊,我明白了。Bergi的答案就是这样:P:谢谢,我尝试了你的解决方案,并且能够得到所需的输出。是的,当我尝试dat时,我能够从上面的json中得到oly父键,比如AuthenticateSERREQ。但是我还想t获取设备信息(即)在上面的方法中,父键中的主键不会被检索,但是你的目的是什么?为什么你想遍历JSON?寻找什么?或者你只是想打印出来?我想遍历JSON,将它的键存储在数据库中,而且我应该能够通过从数据库中检索JSON的内容来恢复JSON的原始形式B
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) );