2017-02-08 3 views
0

Sagen wir, ich die folgenden zwei Datensätze haben:JSON Daten Kombination Sets

{ "food": { 
    "apple": { 
     "color": "red" 
     }, 
    "orange": { 
     "color": "orange" 
     }, 
    "potato": { 
     "color": "brown" 
     }, 
    "tomato": { 
     "color": "red" 
     } 
    } 
} 

und

{ "fruits": { 
    "apple": { 
     "isFruit": "yes" 
     }, 
    "orange": { 
     "isFruit": "yes" 
     }, 
    "tomato": { 
     "isFruit": "yes" 
     } 
    } 
} 

Gibt es eine Möglichkeit, diese beiden Sätze zu kombinieren, so dass sie sich wie am Ende der Suche:

Ich nehme an, es muss eine Möglichkeit geben, diese zwei Sätze zu analysieren und zu kombinieren, aber ich konnte nicht herausfinden, wie.

+2

Parse es fügen Sie dann die Datenschleife mit – m87

Antwort

2

Versuchen Sie JavaScript ternary operator:

var firstJSON = { 
 
\t "food": { 
 
\t \t "apple": { 
 
\t \t \t "color": "red" 
 
\t \t }, 
 
\t \t "orange": { 
 
\t \t \t "color": "orange" 
 
\t \t }, 
 
\t \t "potato": { 
 
\t \t \t "color": "brown" 
 
\t \t }, 
 
\t \t "tomato": { 
 
\t \t \t "color": "red" 
 
\t \t } 
 
\t } 
 
}; 
 

 
var secondJSON = { 
 
\t "fruits": { 
 
\t \t "apple": { 
 
\t \t \t "isFruit": "yes" 
 
\t \t }, 
 
\t \t "orange": { 
 
\t \t \t "isFruit": "yes" 
 
\t \t }, 
 
\t \t "tomato": { 
 
\t \t \t "isFruit": "yes" 
 
\t \t } 
 
\t } 
 
}; 
 

 
for(var i in firstJSON.food) { 
 
    secondJSON.fruits.hasOwnProperty(i) ? firstJSON.food[i].isFruit = secondJSON.fruits[i].isFruit : ''; 
 
} 
 

 
console.log(firstJSON);

+0

Bei weitem die schönsten Einzeiler Antwort hier. Kudos. – Werner

+0

@Werner Danke !! –

4
var foodsData = { "food": { 
    "apple": { 
     "color": "red" 
     }, 
    "orange": { 
     "color": "orange" 
     }, 
    "potato": { 
     "color": "brown" 
     }, 
    "tomato": { 
     "color": "red" 
     } 
    } 
}; 

var fruitsData = { "fruits": { 
    "apple": { 
     "isFruit": "yes" 
     }, 
    "orange": { 
     "isFruit": "yes" 
     }, 
    "tomato": { 
     "isFruit": "yes" 
     } 
    } 
}; 


for (f in foodsData.food) { 
    if (fruitsData.fruits.hasOwnProperty(f)) { 
    foodsData.food[f].isFruit = fruitsData.fruits[f].isFruit 
    } 
} 
console.log(foodsData); 
2
var foodsData = { 
    "food": { 
    "apple": { 
     "color": "red" 
    }, 
    "orange": { 
     "color": "orange" 
    }, 
    "potato": { 
     "color": "brown" 
    }, 
    "tomato": { 
     "color": "red" 
    } 
    } 
}; 

var fruitsData = { 
    "fruits": { 
    "apple": { 
     "isFruit": "yes", 
     "isRoot": 'no', 
     "seasonal": 'Yes', 
    }, 
    "orange": { 
     "isFruit": "yes", 
     "isRoot": 'no' 
    }, 
    "tomato": { 
     "isFruit": "yes", 
     "isRoot": 'No', 
     "seasonal": 'No', 
    } 
    } 
}; 


for (fruit in foodsData.food) { 
    if (fruitsData.fruits.hasOwnProperty(fruit)) { 
    var allProperties = Object.keys(fruitsData.fruits[fruit]); 
    for (var i = 0; i < allProperties.length; i++) { 
     var property = allProperties[i]; 
     foodsData.food[fruit][property] = fruitsData.fruits[fruit][property]; 
    } 
    } 
} 
console.log(foodsData); 

prüfen diese fiddle

Dies funktioniert sogar, wenn Sie einige weitere Eigenschaften in fruitsData für Obst hinzufügen.

1

unten Lösung Versuchen Sie, und es werden alle JSON-Objekt in allgemeiner Weise arbeiten. und auch ich für dynamische Länge von Objekten auch behandelt.

Ich hoffe, das wird Ihnen helfen.

var obj1 = { "food": { 
      "apple": { 
       "color": "red" 
       }, 
      "orange": { 
       "color": "orange" 
       }, 
      "potato": { 
       "color": "brown" 
       }, 
      "tomato": { 
       "color": "red" 
       } 
      } 
     } 
var obj2 = { "fruits": { 
       "apple": { 
        "isFruit": "yes" 
        }, 
       "orange": { 
        "isFruit": "yes" 
        }, 
       "tomato": { 
        "isFruit": "yes" 
        } 
       } 
      } 

function result() { 
    var resObj = []; 

    if(objSize(obj1[Object.keys(obj1)]) >= objSize(obj2[Object.keys(obj2)])) { 
     var indexObj1 = 0; 
     var indexObj2 = 0; 
     for(var i in obj1[Object.keys(obj1)]) { 
      var flag= false; 
      indexObj1++; 
      indexObj2 = 0; 
      for(var j in obj2[Object.keys(obj2)]) { 
       indexObj2++; 
       if(indexObj2 == indexObj1){ 
        if(i == j) { 
         var item = []; 
         var item1 = {}; 

         item.push(obj1[Object.keys(obj1)][i]); 
         item.push(obj2[Object.keys(obj2)][j]); 
         item1[i] = item;    

         resObj.push(item1); 
         flag = true; 
         break; 
        } else { 
         var item = []; 
         var item1 = {}; 

         item.push(obj1[Object.keys(obj1)][i]); 
         item1[i] = item; 

         resObj.push(item1); 

         item = []; 
         item1 = {}; 
         item.push(obj2[Object.keys(obj2)][j]); 
         item1[j] = item;    

         resObj.push(item1); 
         flag = true; 
         break; 
        } 
       } 
      } 
      if(!flag) { 
       var item1 = {}; 

       item.push(obj1[Object.keys(obj1)][i]); 
       item1[i] = item;    

       resObj.push(item1); 
       flag = true; 
      } 

     } 
    } else { 
     for(var i in obj2[Object.keys(obj2)]) { 
      var flag= false; 
      for(var j in obj1[Object.keys(obj1)]) { 
       if(i == j) { 
        var item = []; 
        var item1 = {}; 

        item.push(obj1[Object.keys(obj1)][i]); 
        item.push(obj2[Object.keys(obj2)][j]); 
        item1[i] = item;    

        resObj.push(item1); 
        flag = true; 
        break; 
       } 
      } 
      if(!flag) { 
       var item1 = {}; 

       item.push(obj1[Object.keys(obj1)][i]); 
       item1[i] = item;    

       resObj.push(item1); 
       flag = true; 
      } 

     } 
    } 

    return resObj; 
} 

function objSize(obj) { 
    var size = 0, key; 
    for (key in obj) { 
     if (obj.hasOwnProperty(key)) size++; 
    } 
    return size; 
} 

console.log(result()); 

Finden Sie die Arbeitsdemo in der folgenden Geige.

Working Demo

Verwandte Themen