如何访问nodejs中的json数据属性

时间:2015-04-28 13:35:07

标签: javascript json node.js

我有一个类似于下面代码的json。

var jsonData = {
    "Config": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "CpuShares": 0,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": null,
        "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "HOME=/root"
        ]
        "Hostname": "git",
        "WorkingDir": ""
    },
    "Created": "2015-03-03T08:59:05.735601013Z",
    "Name": "/git",
    "NetworkSettings": {
        "Ports": {
            "22/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "2008"
                }
            ],
            "80/tcp": null,
            "8006/tcp": [
                {
                    "HostIp": "0.0.0.0",
                    "HostPort": "9008"
                }
            ]
        }
    },
    "ResolvConfPath": "/etc/resolv.conf",
    "State": {
        "Pid": 6146,
        "Running": true,
        "StartedAt": "2015-03-03T08:59:05.829535361Z"
    }
}

正如您所看到的,任何属性都有自己独特的名称。我的问题是:如何以这种Env方式访问getValue(jsonData, 'Env');等属性?

我的json比我上面提到的更大更复杂。

1 个答案:

答案 0 :(得分:3)

这是一个函数,如果您不知道对象的结构,它允许您通过对象递归来查找所需的信息。请注意,当找到该键的第一个实例时,这将突破该功能。这意味着如果您有多个名为HostIp的密钥,它只会找到第一个密钥。

function getValue(obj, key) {
    var found = null;
    var recurse = function (obj, key) {
        for (var p in obj) {
            if (p === key) {
                found = obj[p];
                break;
            }
            if (obj[p] !== null && typeof obj[p] === 'object') recurse(obj[p], key);
        }
    }
    recurse(obj, key);
    return found;
}

getValue(jsonData, 'Env'); // [ "PATH=/usr/local/sbin:/usr/local/bin…", "HOME=/root" ]

如果要查找特定键名的所有实例,请改用以下代码。它会将所有匹配添加到数组中,并在对象被拖网后返回该数组。这不是特别有用,因为它没有提供它找到密钥的上下文,但它可能会给你一些想法。

function getValue(obj, key) {
    var found = [];
    var recurse = function (obj, key) {
        for (var p in obj) {
            if (p === key) {
                found.push(obj[p]);
            }
            if (obj[p] !== null && typeof obj[p] === 'object') recurse(obj[p], key);
        }
    }
    recurse(obj, key);
    return found;
}

getValue(jsonData, 'HostPort'); // [ "2008", "9008" ]

DEMO