2013-08-19 63 views
1

我试图从嵌套的JSON文档获取值。我写了下面的功能:从嵌套的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

我觉得应该是name.lname.familyname尝试一次。 @Sparky – Kira

+0

谢谢@Kira,那种访问方式可行,但我正在尝试更多的动态方法。 – Sparky

回答

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; 
} 
1

在你的功能,你需要指定由get_value返回值:

get_value(dataObject[i], keyName); 

应该是:

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

或者,只是返回值:

return get_value(dataObject[i], keyName); 
+0

啊,与最初的问题一起工作。但是,当我尝试'get_value(jsondata,'surname');''而不是'get_value(jsondata,'familyName')''时失败了;' – Sparky

0

删除value = null;从功能。

+0

然后它会给'undefined' :) – Sparky