2013-08-19 146 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都是唯一的简单的调用它。