Javascript 从嵌套数组(json)获取值

Javascript 从嵌套数组(json)获取值,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我正在尝试从数组中获取值: [ { "id": "5899aaa321e01b8b050041cb", "name": "John Doe", "picture": {"small": "https://cdn.image.com/1234"}, "age": 28, "location": {"city": "London"}, "following": 1, "resources": {"band": "http://image/m

我正在尝试从数组中获取值:

[
  {
    "id": "5899aaa321e01b8b050041cb",
    "name": "John Doe",
    "picture": {"small": "https://cdn.image.com/1234"},
    "age": 28,
    "location": {"city": "London"},
    "following": 1,
    "resources": {"band": "http://image/music"},
    "top_works": [
      {
        "points": 20,
        "portfolio": {
        "facebook_id": "1e691681472",
        "picture": {"small": "https://cdn.image.com/1234"}
        }
      },
      {
        "points": 10,
        "portfolio": {
        "facebook_id": "1e6916r17ry",
        "picture": {"small": "https://cdn.image.com/1234"}
        }
      }
    ]
  }
]

$(document).ready(function() {
  $.ajax({
    type: 'GET',
    url: '/api/url/123',
    data: { get_param: 'value' },
    dataType: 'json',
    success: function (data) {
      $.each(data, function (index, element) {
        $('#api').append('<div>'
        + ' <div><h3>' + element.name + '</h3></div>'
        + '<div>' + element.top_works[2].portfolio.picture.small + '></div>');
      });
    }
  });
});
[
{
“id”:“5899AAA321E01B8B05041CB”,
“姓名”:“约翰·多伊”,
“图片:{“小”:”https://cdn.image.com/1234"},
“年龄”:28岁,
“地点”:{“城市”:“伦敦”},
"以下":一,,
“资源”:{“波段”:”http://image/music"},
“顶级作品”:[
{
"分":20分,,
“投资组合”:{
“facebook_id”:“1e691681472”,
“图片:{“小”:”https://cdn.image.com/1234"}
}
},
{
"点":10,,
“投资组合”:{
“facebook_id”:“1e6916r17ry”,
“图片:{“小”:”https://cdn.image.com/1234"}
}
}
]
}
]
$(文档).ready(函数(){
$.ajax({
键入:“GET”,
url:“/api/url/123”,
数据:{get_param:'value'},
数据类型:“json”,
成功:功能(数据){
$.each(数据、函数(索引、元素){
$('#api')。追加(''
+''+element.name+''
+''+元素.top_工作[2].portfolio.picture.small+'>');
});
}
});
});
我可以毫无问题地阅读所有内容,因为我需要指定数字[x],而且我需要一个循环

在某些情况下,如果top_works为空,我会得到一个“undefinedinconsole”,如果元素不存在,我需要显示一个空白


有人可以帮我吗?

您应该验证是否存在,例如:

$.each(data, function (index, element) {
    var HTML = '<div>'
    + ' <div><h3>' + element.name + '</h3></div>';
    var exists = element.top_works[2] && element.top_works[2].portfolio && element.top_works[2].portfolio.picture && element.top_works[2].portfolio.picture.small;
    HTML+= exists ? '<div>' + element.top_works[2].portfolio.picture.small + '</div>' : '<div>#empty space</div>';
    $('#api').append(HTML + '</div>');
});
$。每个(数据、函数(索引、元素){
var HTML=''
+''+element.name+'';
var exists=element.top_works[2]和&element.top_works[2]。公文包和元素。top_works[2]。公文包.picture和元素。top_works[2]。公文包.picture.small;
HTML+=存在?''+元素。top_工作[2]。portfolio.picture.small+'':'空白';
$('#api').append(HTML+'');
});
但是,如果您想在最后一个索引中搜索图片,也许可以执行以下操作:

$.each(data, function (index, element) {
    var HTML = '<div>'
    + ' <div><h3>' + element.name + '</h3></div>';
    var last = element.top_works ? element.top_works.length-1 : -1;
    var exists = last >= 0;
    HTML+= exists ? '<div>' + element.top_works[last].portfolio.picture.small + '</div>' : '<div>#empty space</div>';
    $('#api').append(HTML + '</div>');
});
$.each(data, function (index, element) {
    var HTML = '<div>'
    + ' <div><h3>' + element.name + '</h3></div>';
    if(element.top_works && element.top_works.length > 0) {
        for(var i in element.top_works) {
            HTML+= '<div>' + element.top_works[i].portfolio.picture.small + '</div>';
        }
    } else {
        HTML += '<div>#empty space</div>';
    }
    $('#api').append(HTML + '</div>');
});
$。每个(数据、函数(索引、元素){
var HTML=''
+''+element.name+'';
var last=element.top_works?element.top_works.length-1:-1;
var exists=last>=0;
HTML+=存在?''+元素。top_工作[last]。portfolio.picture.small+'':'空白';
$('#api').append(HTML+'');
});
编辑 对于循环,可以执行以下操作:

$.each(data, function (index, element) {
    var HTML = '<div>'
    + ' <div><h3>' + element.name + '</h3></div>';
    var last = element.top_works ? element.top_works.length-1 : -1;
    var exists = last >= 0;
    HTML+= exists ? '<div>' + element.top_works[last].portfolio.picture.small + '</div>' : '<div>#empty space</div>';
    $('#api').append(HTML + '</div>');
});
$.each(data, function (index, element) {
    var HTML = '<div>'
    + ' <div><h3>' + element.name + '</h3></div>';
    if(element.top_works && element.top_works.length > 0) {
        for(var i in element.top_works) {
            HTML+= '<div>' + element.top_works[i].portfolio.picture.small + '</div>';
        }
    } else {
        HTML += '<div>#empty space</div>';
    }
    $('#api').append(HTML + '</div>');
});
$。每个(数据、函数(索引、元素){
var HTML=''
+''+element.name+'';
if(element.top_有效和&element.top_有效长度>0){
for(元素中的变量i.top_工作){
HTML+=''+元素。top_工作[i]。portfolio.picture.small+'';
}
}否则{
HTML+='#空白';
}
$('#api').append(HTML+'');
});

您可以使用
array.length
属性检查and元素是否存在,如下例所示

var-topWorks={“top_-works”:[
{
"分":20分,,
“投资组合”:{
“facebook_id”:“1e691681472”,
“图片”:{
“小”:https://cdn.image.com/1234",
}
}
},
{
"点":10,,
“投资组合”:{
“facebook_id”:“1e6916r17ry”,
“图片”:{
“小”:https://cdn.image.com/1234",
}
}
},
]
}
如果(topWorks.top_works.length>0){
log(“Top works在索引0处有元素”);
}
如果(topWorks.top_works.length>1){
log(“Top works的元素位于索引1”);
}
如果(topWorks.top_works.length>2){
log(“Top works在索引2处有元素”);
}否则
{
log(“Top works在索引2处没有元素”);

}
什么是输入,什么是输出?你尝试了什么?你的数组格式不正确。谢谢你,这是有效的!第二个代码,但如果我想得到更多的顶级元素,它会起作用吗?我得到最后一个元素…嗯..如果你想得到3?