2013-08-19 202 views
0

這可能是一個非常簡單的問題,但讓我們說我有一個PHP json_encoded這種形式的JavaScript對象:調用JavaScript對象屬性

var js_objet = { 
    "1": { 
     "Users": { 
      "id": "14", 
      "name": "Peter" 
     }, 
     "Children": [ 
      { 
       id: 17, 
       name: "Paul" 
      }, 
      { 
       id: 18, 
       name: "Mathew" 
      } 
     ] 
     }  
    } 

什麼synthax得到孩子的名字與編號18(馬修)例如從該對象?

謝謝

+0

其實並不那麼簡單!您必須編寫一個自定義函數來爲您的自定義JSON結構執行findById。 –

+0

var n = js_objet [「1」] [「Children」] [1] .name – Haben

回答

0

你可以這樣說:

var name = js_objet["1"].Children[1].name; 

JSFiddle available here

+0

我得到'不能讀取屬性'undefined'的兒童' – user765368

+0

我編輯了我的答案。我錯誤地輸入了變量名(它應該是'js_objet'而不是's_objet') – Zbigniew

0

這是我會怎麼處理這個問題:

var id = 18; 
var name = ''; 
var jsObjIndex = "1"; 
var jsObjAttr = "Children" 
for (var i = 0; i < js_objet[jsObjIndex][jsObjAttr].length; i++) 
{ 
    if (js_objet[jsObjIndex][jsObjAttr][i].id == id) 
    { 
     name = js_objet[jsObjIndex][jsObjAttr][i].name; 
     break; 
    } 
} 

你基本上執行線性搜索jsObjIndex.Children的每個元素。有可能更好的解決方案:)。

1

這裏有一個如前所述的自定義函數。

function getChildrenById(id){ 
    for (var child in js_objet[1].Children){ 
     if(id == js_objet[1].Children[child].id){ 
      return js_objet[1].Children[child].name; 
     } 
    } 
    return false; 
} 

運行getChildrenById(18)將返回 「馬修」

希望幫助,

R.

0

這確實是一個評論,但我沒有足夠的聲譽(但它的相關因爲我最近遇到了同樣的問題):如果您可以更改JSON格式以將ID用作每個子對象的鍵,則可能會更容易:

var js_objet = { 
"1": { 
    "Users": { 
     "id": "14", 
     "name": "Peter" 
    }, 
    "Children": { 
     "17":{ 
      "name": "Paul" 
     }, 
     "18":{ 
      "name": "Mathew" 
     } 
    } 
    }  
} 

然後你就可以使用

js_objet[1].Children[18].name; 

這是假設每個ID都是唯一的簡單的調用它。