一尘不染

SQL样式对JSON数据进行JOIN

json

有什么有效的方法来连接JSON数据吗?假设我们有两个JSON数据集:

{"COLORS":[[1,red],[2,yellow],[3,orange]]}

{"FRUITS":[[1,apple],[2,banana],[3,orange]]}

我想将其转换为以下客户端:

{"NEW_FRUITS":[[1,apple,red],[2,banana,yellow],[3,orange,orange]]}

请记住,这里将有成千上万条包含更为复杂的数据结构的记录。jQuery和香草javascript都很好。还请记住,可能会有没有水果的颜色和没有颜色的水果。

注意:为了简单起见,假设两个数据集的顺序相同,但是第二个数据集可能有间隔。


阅读 471

收藏
2020-07-27

共1个答案

一尘不染

没有直接的方法,但是您可以编写逻辑来获得这样的组合对象。由于“苹果,红色,香蕉…”都是字符串,因此应使用单引号或双引号引起来。

如果您可以通过为缺失的项目添加空值来匹配“颜色”和“水果”配置数组,则可以使用此方法。

工作 演示

var colors = {"COLORS":[[1,'red'],[2,'yellow'],[3,'orange']]}

var fruits = {"FRUITS":[[1,'apple'],[2,'banana'],[3,'orange']]}

var newFruits = {"NEW_FRUITS": [] }

//Just to make sure both arrays are the same size, otherwise the logic will break
if(colors.COLORS.length == fruits.FRUITS.length){
    var temp;
    $.each(fruits.FRUITS, function(i){
        temp = this;
        temp.push(colors.COLORS[i][2]);
        newFruits.NEW_FRUITS.push(temp);
    });
}

另外,如果可以将创建colorsfruits配置作为对象数组而不是数组数组,则可以尝试此解决方案。元素的顺序在这里无关紧要,但数组大小仍应匹配。

工作 演示

var colors = {"COLORS":[ {"1": 'red'}, { "2": 'yellow'}, {"3":'orange'}]}

var fruits = {"FRUITS":[ {"1":'apple'}, { "2": 'banana'}, {"3":'orange'}]}

var newFruits = {"NEW_FRUITS": [] }

if(colors.COLORS.length == fruits.FRUITS.length){
    var temp, first;
    $.each(fruits.FRUITS, function(i){
        for(first in this)break;
        temp = {};
        temp[first] = [];
        temp[first].push(this[first]);
        temp[first].push(colors.COLORS[i][first]);
        newFruits.NEW_FRUITS.push(temp);
    });
}
2020-07-27