3

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

任何帮助都感激不尽。

4

3 回答 3

4

您将需要递归进行树遍历

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-27T11:11:03.000 回答
2

Might also want to try out Node traverse - https://github.com/substack/js-traverse. Allows recursively walking a JSON tree to get each key value pair with context (ie: keeps track of parent), and can run map/reduce while traversing tree. Very powerful.

于 2012-12-28T14:15:07.217 回答
0

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

于 2012-12-27T11:24:41.013 回答