我正在尝试从嵌套的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循环中的返回实际上并没有在找到值时退出循环。
我做错了什么?提前谢谢。
答案 0 :(得分:1)
在您的函数中,您需要指定get_value
返回的值:
get_value(dataObject[i], keyName);
应该是:
value = get_value(dataObject[i], keyName);
或者,只需返回值:
return get_value(dataObject[i], keyName);
答案 1 :(得分:1)
最后我重写了代码,现在它将返回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;
}
答案 2 :(得分:0)
从功能中删除value = null;
。