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

Matching values from two separate JSON feeds

本文关键字:JSON 独立 两个      更新时间:2023-09-26

我正在研究一个带有多个JSON提要的AJAX驱动项目。我使用一个提要创建一个类别列表,该列表过滤来自第二个提要的文章。

我的第一个提要是这样的:

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

我的第二个提要是这样的:

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

第一个提要是主题列表,第二个提要是由这些主题标记的一组文章。我能够很好地匹配过滤的guid,但问题是,由于第二个提要的限制,我无法将标题"Safety"拉到文章中。出于各种原因,我需要这个标题,主要是样式和将标题推送到页面URL。

我正在努力寻找最好的方法来解决这个问题,以便使它充满活力。基本上,我想根据第一个提要找到将GUID与第二个提要中的标题关联起来的最佳方法。

我是这样拉两个提要的:

喂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>');
        } 
    });
});

饲料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>');
        }
    }); 
}

希望这是有意义的,如果需要,很高兴提供更多的细节。

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

//dynamically set the titles
var guid2title = {}
//titles is the array of titles/GUID in your post
for (var i = 0; i < titles.length; i++){
   guid2title[titles[i]["Id"]] = titles[i]["Title"];
}
//items is the json array of articles in your post
for (var i = 0; i < items.length; i++){
    items[i].titles = []; //used later to save to the object
    for (var j = 0; j < items[i].topics.length; j++){
       var GUID = items[i].topics[j];
       var title = guid2title[GUID];
       //attach it to your item for later use
       items[i].titles.push(title);
    }
}     

执行一些循环并将主题标题添加到文章中,例如:

  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/

在本例中,您可以执行以下操作:

函数……(){

$.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>');
    }
}); 

}