【问题标题】:Getting values from nested JSON document从嵌套的 JSON 文档中获取值
【发布时间】:2013-08-19 10:22:41
【问题描述】:

我正在尝试从嵌套的 JSON 文档中获取值。我写了以下函数:

var jsondata = {
'name': {
    'fname': 'Jack',
    'lname': [{'familyName': 'Sparrow'}, {'surname': 'Captain'}]
    }
};

var extracted = get_value(jsondata, 'familyName');
console.log(extracted); // null is getting printed

function get_value(dataObject, keyName) {
    value = null;

    for (var i in dataObject) {
        if (i == keyName) {
            value = dataObject[keyName];
            console.log(value); // getting correct value of 'familyName' here
            return value;
        } else if (typeof dataObject[i] == 'object') {
        get_value(dataObject[i], keyName);
        }
    }
    return value;
}

问题是,我在打印console.log(value); 时得到了正确的值,但null 正在由console.log(extracted); 打印。就像for-in循环中的return在找到值时实际上并没有退出循环。

我做错了什么?提前致谢。

【问题讨论】:

  • 我觉得应该是name.lname.familyname 试一试。 @Sparky
  • 感谢@Kira,这种访问方式会起作用,但我正在尝试更多动态方法。

标签: javascript json


【解决方案1】:

在你的函数中你需要分配get_value返回的值:

get_value(dataObject[i], keyName);

应该是:

value = get_value(dataObject[i], keyName);

或者,只返回值:

return get_value(dataObject[i], keyName);

【讨论】:

  • 啊,解决了最初的问题。但是当我尝试get_value(jsondata, 'surname');而不是get_value(jsondata, 'familyName');时失败了
【解决方案2】:

最后我重写了代码,现在它将返回 json 数据中任何给定键的值:-

function get_value_nested(dataObject, keyName) {
    var value = null;
    this.get_value = function (dataObject, keyName) {
        for (i in dataObject) {
            if (i == keyName) {
                value = dataObject[keyName];
            } else if (typeof dataObject[i] == 'object') {
                 this.get_value(dataObject[i], keyName);
            }
        }
        return value;
    }

    this.get_value(dataObject, keyName);

    return value;
}

【讨论】:

    【解决方案3】:

    从函数中删除value = null;

    【讨论】:

    • 然后它会给undefined :)
    猜你喜欢
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多