匹配来自两个单独的JSON提要的值

时间:2016-09-07 04:59:44

标签: javascript jquery json ajax

我正在开发一个由多个JSON源驱动的AJAX项目。我正在使用一个Feed创建一个类别列表,用于过滤来自第二个Feed的文章。

我的第一个Feed看起来像这样:

"value": [
    {
        "Id": "1ca44b5b-06ab-63fa-8375-ff00000b3273",
        "Title": "Safety",
    }, ...
]

我的第二个Feed看起来像这样:

value": [
    {
        "Id": "30b94b5b-06ab-63fa-8375-ff00000b3273",
        "Title": "Test article",
        "Body": "Test content",
        "topics": [
            "1ca44b5b-06ab-63fa-8375-ff00000b3273"
        ],
    }, ...
]

第一个Feed是主题列表,第二个Feed是由这些主题标记的一组文章。我能够匹配GUID进行过滤很好,但问题是由于第二个Feed的限制我无法将标题“安全”拉入文章。我出于各种原因需要这个标题,主要是样式和将标题推送到页面URL。

我正在努力找到解决这个问题的最佳方法,以使其向前发展。基本上,我想根据我的第一个Feed找到将GUID与第二个Feed中的标题相关联的最佳方法。

以下是我如何拉动两个Feed:

Feed 1:

$('.category-filters').each(function(){
    var $this = $(this);

    $.ajax({
        method:"GET",
        url: '/api/stories/flat-taxa?$filter=TaxonomyId%20eq%20dca84b5b-06ab-63fa-8375-ff00000b3273',
        data: { format:'json'},
        context:$this
    }).success(function(data){

        var category = data.value;
        var filter = [];

        for (i = 0; i < category.length; i++) { 
            $this.append('<li><input type="checkbox" id="' + category[i].Id + '"><label for="' + category[i].Id + '">' + category[i].Title + '</label></li>');
        } 
    });
});

Feed 2:

function storyCards(){

    $.ajax({ 
        method:"GET",
        url: url,
        data: { format:'json' },
        context:$('.story-cards')
    }).success(function(data){ 
        var story = data.value;

        for (i = 0; i < story.length; i++) { 
            $('.story-cards').append('<li class="item card-item"><div class="card"><div class="content"><h2>' + story[i].Title + '</h2>' + story[i].Summary + '</div><div class="card-footer"><a class="button" href="' + story[i].UrlName + '">' + story[i].ButtonText + '</a></div></div></li>');
        }
    }); 
}

希望这很有意义,很高兴在需要时提供更多详细信息。

2 个答案:

答案 0 :(得分:1)

进行一些循环并将主题标题添加到文章中:

  var obj1 = {
  "value": [{
    "Id": "1ca44b5b-06ab-63fa-8375-ff00000b3273",
    "Title": "Safety",
  }]
};

var obj2 = {
  "value": [{
    "Id": "30b94b5b-06ab-63fa-8375-ff00000b3273",
    "Title": "Test article",
    "Body": "Test content",
    "topics": [
      "1ca44b5b-06ab-63fa-8375-ff00000b3273"
    ],
  }]
};

$.each(obj2.value, function(i, v) {
  $.each(obj1.value, function(index, val) {
    if (v.topics[0] == val.Id) {
      obj2.value[i]['TopicName'] = val.Title;

    }
  });
});
console.log(obj2);

演示:https://jsfiddle.net/jrdn27rf/

在这种情况下,您可以执行以下操作:

function storyCards(){

$.ajax({ 
    method:"GET",
    url: url,
    data: { format:'json' },
    context:$('.story-cards')
}).success(function(data){ 
    var story = data.value;

    for (i = 0; i < story.length; i++) { 
        var categoryTitle = $('label[for="'+story[i].topics[0]+']"').text();
        $('.story-cards').append('<li class="item card-item"><div class="card"><div class="content"><h2>' + story[i].Title + '</h2>' + story[i].Summary + '</div><p>'+categoryTitle +'</p><div class="card-footer"><a class="button" href="' + story[i].UrlName + '">' + story[i].ButtonText + '</a></div></div></li>');
    }
}); 

}

答案 1 :(得分:1)

似乎是共享字典的好地方,您可以将GUID与标题匹配。

starttime