从对象获取子JSON值

时间:2014-04-16 17:59:45

标签: javascript json backbone.js

我有一个带有两个JSON对象的端点,如下所示:

{
"main" {
"id": 1,
"title": Main Title,
},
{
"secondary" {
"id": 3,
"title": Secondary Title,
},

我正在使用骨干并且具有以下$ each函数,但是使用点符号,我似乎无法浏览到标题(例如main.title或secondary.title)。我错过了什么?

var collection = new contentArticles([], { id: urlid });
            collection.fetch({
                dataType: "json",
                success: function (model, response) {
                    console.log(response);
                    $.each(response, function (index, value) {
                        console.log(value.main.title);
                        $("#test2").append('<li>' + value.main.title + '</li>');
                    });

在我的控制台中,它出现以下错误:Uncaught TypeError:无法读取属性&#39; title&#39;未定义的

2 个答案:

答案 0 :(得分:1)

假设您的JSON在返回时实际上有效(它以您显示的方式无效),请尝试

$("#test2").append('<li>' + value.title + '</li>');

您的实际JSON应如下所示:

{
    "main": {
        "id": 1,
        "title": Main Title,
    },
    "secondary": {
        "id": 3,
        "title": Secondary Title,
     }
}

如果您只想要main的值,而不是使用$ .each(),请删除整个块并执行:

$("#test2").append('<li>' + response.main.title + '</li>');

你的最终代码看起来像是:

var collection = new contentArticles([], { id: urlid });
collection.fetch({
    dataType: "json",
    success: function (model, response) {
        console.log(response);
        if (response.main.title !== 'undefined'){
            $("#test2").append('<li>' + value.main.title + '</li>');
        }else{
            console.log('Main is undefined');
        }
    }
});

最终编辑:看起来你想要像JSON一样:

{
    "main": [{
        "id": 1,
        "title": "Main Title"
    }, {
        "id": 2,
        "title": "Main Title 2"
    }, {
        "id": 3,
        "title": "Main Title 3"
    }],
    "secondary": [{
        "id": 5,
        "title": "Secondary Title 5"
    }, {
        "id": 34,
        "title": "Secondary Title 34"
    }, {
        "id": 36,
        "title": "Secondary Title 36"
    }]
}

如果是这种情况,您的代码将如下所示:

var collection = new contentArticles([], { id: urlid });
collection.fetch({
    dataType: "json",
    success: function (model, response) {
        console.log(response);
        $.each(function(index, value){
            $.each(item_index, item_value){
                $("#test2").append('<li>' + item_value.title + '</li>');
            }
        });
    }
});

答案 1 :(得分:1)

问题在于输入JSON,它应该是

{
  "main" :{
  "id": 1,
  "title": "Main Title"
  },
  "secondary":{
  "id": 3,
  "title": "Secondary Title"
  }
}