2016-12-28 3 views
1

2つのJSONファイルがあります。 1つはすべての製品データを含み、もう1つは栄養データを含む。現在、私は両方の配列を連結していますが、これらの配列の両方からオブジェクトを結合する必要があります。2つのJSON配列を項目番号で結合しようとしています

製品のJSONファイルには「itemNum」があり、栄養価の高いJSONファイルには「itemFullUPC」があります。これらのデータベースの両方で、各製品の番号は同じです。 "itemFullUPCと" itemNum "は、2つのデータベース内の特定の製品の" 070796400087 "と等しくなります。

「itemNum」と「itemFullUPC」を持つオブジェクトのこれら2つのデータベースとすべてのコンテンツをマージする方法一致していますか?これは理にかなって願っています。

$.ajax({ 
    dataType: "jsonp", 
    url: 'http://50.73.209.125:8080/api/ItemMaster/', 
    success: function(json){ 
    //assign JSON to product data variable 
    product_data = json; 

    $.ajax({ 
    dataType: "jsonp", 
    url: 'http://50.73.209.125:8080/api/ItemNutrition/', 
    success: function(json){ 
    //assign JSON to nutrition data variable 
    nutritional_data = json; 


    var json = product_data.concat(nutritional_data); 
    console.log(json); 

     } 
    }); 
    } 
}); 

栄養DBオブジェクトの例

{ 
    "_id":"5791193f8d30bc8e78002ced", 
    "itemLastUpdated":"12/9/2016 1:02:31 PM", 
    "itemSelenium":0, 
    "itemZinc":0, 
    "itemMagnesium":0, 
    "itemIodine":0, 
    "itemPhosphorus":0, 
    "itemPanthoAcid":0, 
    "itemBiotin":0, 
    "itemVitaminB12":0, 
    "itemFolate":0, 
    "itemVitaminB6":0, 
    "itemManga":0, 
    "itemNiacin":0, 
    "itemRiboflavin":0, 
    "itemThiamin":0, 
    "itemVitaminK":0, 
    "itemVitaminE":0, 
    "itemCopper":0, 
    "itemVitaminD":0, 
    "itemIron":0, 
    "itemCalcium":0, 
    "itemVitaminC":0, 
    "itemVitaminA":0, 
    "itemPolyUnsatFat":0, 
    "itemSaturFat":0, 
    "itemTotalFat":0, 
    "itemSugars":0, 
    "itemDietFiber":0, 
    "itemTotalCarb":1, 
    "itemPotassium":0, 
    "itemSodium":500, 
    "itemCholesterol":0, 
    "itemMonoUnsatFat":0, 
    "itemTransFat":0, 
    "itemProtein":1, 
    "itemSugarAlcohol":0, 
    "itemCaloriesFromFat":0, 
    "itemCalories":5, 
    "itemServings":6, 
    "itemIngredients":"Chicken Broth, Contains less than 1% of the following: Salt, Dextrose, Monosodium Glutamate, Maltodextrin, Flavor", 
    "servingSize":"1 cup", 
    "servingSizeUnit":"cup", 
    "servingSizeQnty":1, 
    "itemNum":"070796400087", 
    "__v":0 
} 

製品DBオブジェクトの例は

{ 
    "_id":"577411f7cce3c4c741000001", 
    "itemGMOFree":"N", 
    "itemBrandLetter":"C", 
    "itemKosherSym":"N", 
    "itemShipper":"N", 
    "itemRefridge":"N", 
    "itemFrozen":"N", 
    "itemPreWeight":"Y", 
    "itemDeli":"N", 
    "itemGlutenFree":"Y", 
    "itemHoliday":"N", 
    "itemSeasonBuy":"Y", 
    "itemScannable":"Y", 
    "itemUnlabeled":"N", 
    "itemPalletWeight":2500, 
    "itemPalletTiers":10, 
    "itemPalletBlocks":10, 
    "itemCaseCube":0.56, 
    "itemCaseDepth":16.25, 
    "itemCaseWidth":12, 
    "itemCaseHeight":5, 
    "itemCaseWeight":24.5, 
    "itemCaseUnits":12, 
    "itemPieceCube":0.043, 
    "itemPieceDepth":4, 
    "itemPieceWidth":4, 
    "itemPieceHeight":4.65, 
    "itemPieceWeight":1.75, 
    "itemNetContent":"28.00", 
    "itemFullUPC":"070796400087", 
    "itemCountry":"Italy", 
    "itemPackSize":"12/28 oz", 
    "itemUOM":"OZ", 
    "itemDescription":"Whole peeled San Marzano plum tomatoes are specially grown at the base of Mt. Vesuvius, and are freshly packed with basil in puree. This type of tomato is sweeter, less acidic, contains less seeds, and has higher pectin than other tomatoes.", 
    "itemName":"Cento San Marzano Certified Tomatoes", 
    "itemBuildNum":0, 
    "itemSuffix":7, 
    "itemItem":40008, 
    "itemMFG":70796, 
    "itemPrefix":0, 
    "itemCase_GTIN":30, 
    "itemPiece_GTIN":0, 
    "imageURL":"http://centogallery.zenfolio.com/img/s5/v130/p961607729-3.jpg", 
    "itemCommodity":"1120", 
    "__v":0, 
    "itemLastUpdated":"12/21/2016 1:06:28 PM", 
    "itemVendor":17477, 
    "itemBPAFree":"", 
    "itemCategory":1, 
    "itemDairy":"", 
    "itemEgg":"", 
    "itemLowSodium":"", 
    "itemOrganic":"", 
    "itemPeanuts":"", 
    "itemShellfish":"", 
    "itemSoy":"", 
    "itemTreeNuts":"", 
    "itemWheat":"", 
    "itemWholeGrain":"" 
} 

これらのオブジェクトの両方に同じアイテム番号 "070796400087"が両方含まれていることに注意してください。 itemNumがitemsFullUPCと一致する場合、これらの例の両方を組み合わせる必要があります。

+0

あなたは、各JSONの例構築のカップルを投稿することができますか? –

+0

@VanquishedWombat私はそれを – Tom

+0

の上に置きます。ユーザーが配列1から製品を選択したときに、配列2の大きなループを実行する必要がないように結合したいと思いますか? –

答えて

1

これは、array2オブジェクトをプロパティとして割り当てることによって新しいJSオブジェクトにリンクすることによって機能します。より良い理解のために、javascript連想配列を読んでください。

// Assuming 2 arrays array1 & array2 - using dummy data here for clarity. Important to note that both have some matching value. 
 

 
    var array1 = JSON.parse('[{"itemNum": "1234a", "otherParam": "A1"},{"itemNum": "5678a", "otherParam": "B2"}]') 
 

 
    var array2 = JSON.parse('[{"itemFullUPC": "1234a", "itemDescription": "Details about product 1234a"},{"itemFullUPC": "5678a", "itemDescription": "Details about product 5678a"}]') 
 

 
    
 
    // Load phase - run any time after array 2 is loaded 
 
    var lookup = {} 
 
    for (var i = 0; i < array2.length; i = i + 1){ 
 
     obj = array2[i]; 
 
     lookup[obj.itemFullUPC] = obj; // creates a property in lookup object with key of itemFullPC 
 
    } 
 
     
 
    function getProdDetails(idx){ 
 
     var prod = array1[idx] 
 
     console.log("itemDescription for " + prod.itemNum + " = " + lookup[prod.itemNum].itemDescription) 
 
    } 
 

 
    getProdDetails(1) 
 
    getProdDetails(0)

関連する問題