2013-08-19 167 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