qq358828690 2019-07-03 15:24 采纳率: 42.9%
浏览 566
已采纳

js或jquery实现json合并或者压缩

原本的json

[{
    "cslbArr": [{
        "cslb": "规格参数",
        "csArr": [{
            "key": "总质量",
            "val": "32250kg"
        }, {
            "key": "轴距",
            "val": "4600+1350mm"
        }, {
            "key": "长",
            "val": "10620mm"
        }, {
            "key": "宽",
            "val": "2500mm"
        }, {
            "key": "高",
            "val": "3880mm"
        }]
    }, {
        "cslb": "性能参数",
        "csArr": [{
            "key": "灭火剂装载量",
            "val": "13900kg"
        }, {
            "key": "工作高度",
            "val": "20m"
        }, {
            "key": "工作幅度",
            "val": "12m"
        }, {
            "key": "消防泵流量",
            "val": "50 L/s"
        }, {
            "key": "消防炮最大射程",
            "val": "≥60m"
        }, {
            "key": "工作斗载荷",
            "val": "/"
        }, {
            "key": "消防炮流量",
            "val": "50 L/s"
        }]
    }]
}, {
    "cslbArr": [{
        "cslb": "规格参数",
        "csArr": [{
            "key": "总质量",
            "val": "18100kg"
        }, {
            "key": "轴距",
            "val": "4500mm"
        }, {
            "key": "长",
            "val": "9670mm×"
        }, {
            "key": "宽",
            "val": "3880mm"
        }, {
            "key": "高",
            "val": "2500mm"
        }]
    }, {
        "cslb": "性能参数",
        "csArr": [{
            "key": "灭火剂装载量",
            "val": "/"
        }, {
            "key": "工作高度",
            "val": "32m"
        }, {
            "key": "工作幅度",
            "val": "20m"
        }, {
            "key": "消防泵流量",
            "val": "/"
        }, {
            "key": "消防炮最大射程",
            "val": "≥70m"
        }, {
            "key": "工作斗载荷",
            "val": "500kg"
        }, {
            "key": "消防炮流量",
            "val": "60L/s"
        }]
    }]
}, {
    "cslbArr": [{
        "cslb": "规格参数",
        "csArr": [{
            "key": "机长",
            "val": "16m"
        }, {
            "key": "机宽",
            "val": "11m"
        }, {
            "key": "翼展",
            "val": "4.9m"
        }]
    }, {
        "cslb": "性能参数",
        "csArr": [{
            "key": "最大起飞重量",
            "val": "4800kg"
        }, {
            "key": "载员",
            "val": "16人"
        }, {
            "key": "最大速度",
            "val": "180km/h"
        }, {
            "key": "飞行高度",
            "val": "0.6-1.2m"
        }, {
            "key": "适航海况",
            "val": "3级"
        }]
    }]
}]

想要的到的json结果

[{
    "cslb": "规格参数",
    "csArr": [{
        "key": "总质量",
        "val": ["32250kg", "18100kg", ""]
    }, {
        "key": "轴距",
        "val": ["4600+1350mm", "4500mm", ""]
    }, {
        "key": "长",
        "val": ["10620mm", "9670mm×", ""]
    }, {
        "key": "宽",
        "val": ["2500mm", "3880mm", ""]
    }, {
        "key": "高",
        "val": ["3880mm", "2500mm", ""]
    }, {
        "key": "机长",
        "val": ["", "", "16m"]
    }, {
        "key": "机宽",
        "val": ["", "", "11m"]
    }, {
        "key": "翼展",
        "val": ["", "", "4.9m"]
    }]
}, {
    "cslb": "性能参数",
    "csArr": [{
        "key": "灭火剂装载量",
        "val": ["13900kg", "/", ""]
    }, {
        "key": "工作高度",
        "val": ["20m", "32m", ""]
    }, {
        "key": "工作幅度",
        "val": ["12m", "20m", ""]
    }, {
        "key": "消防泵流量",
        "val": ["50 L/s", "/", ""]
    }, {
        "key": "消防炮最大射程",
        "val": ["≥60m", "≥70m", ""]
    }, {
        "key": "工作斗载荷",
        "val": ["/", "500kg", ""]
    }, {
        "key": "消防炮流量",
        "val": ["50 L/s", "60L/s", ""]
    }, {
        "key": "最大起飞重量",
        "val": ["", "", "4800kg"]
    }, {
        "key": "载员",
        "val": ["", "", "16人"]
    }, {
        "key": "最大速度",
        "val": ["", "", "180km/h"]
    }, {
        "key": "飞行高度",
        "val": ["", "", "0.6-1.2m"]
    }, {
        "key": "适航海况",
        "val": ["", "", "3级"]
    }]
}]
  • 写回答

3条回答 默认 最新

  • 山顶哥 2019-07-04 14:05
    关注
    var arr = [{
        "cslbArr": [{
            "cslb": "规格参数",
            "csArr": [{
                "key": "总质量",
                "val": "32250kg"
            }, {
                "key": "轴距",
                "val": "4600+1350mm"
            }, {
                "key": "长",
                "val": "10620mm"
            }, {
                "key": "宽",
                "val": "2500mm"
            }, {
                "key": "高",
                "val": "3880mm"
            }]
        }, {
            "cslb": "性能参数",
            "csArr": [{
                "key": "灭火剂装载量",
                "val": "13900kg"
            }, {
                "key": "工作高度",
                "val": "20m"
            }, {
                "key": "工作幅度",
                "val": "12m"
            }, {
                "key": "消防泵流量",
                "val": "50 L/s"
            }, {
                "key": "消防炮最大射程",
                "val": "≥60m"
            }, {
                "key": "工作斗载荷",
                "val": "/"
            }, {
                "key": "消防炮流量",
                "val": "50 L/s"
            }]
        }]
    }, {
        "cslbArr": [{
            "cslb": "规格参数",
            "csArr": [{
                "key": "总质量",
                "val": "18100kg"
            }, {
                "key": "轴距",
                "val": "4500mm"
            }, {
                "key": "长",
                "val": "9670mm×"
            }, {
                "key": "宽",
                "val": "3880mm"
            }, {
                "key": "高",
                "val": "2500mm"
            }]
        }, {
            "cslb": "性能参数",
            "csArr": [{
                "key": "灭火剂装载量",
                "val": "/"
            }, {
                "key": "工作高度",
                "val": "32m"
            }, {
                "key": "工作幅度",
                "val": "20m"
            }, {
                "key": "消防泵流量",
                "val": "/"
            }, {
                "key": "消防炮最大射程",
                "val": "≥70m"
            }, {
                "key": "工作斗载荷",
                "val": "500kg"
            }, {
                "key": "消防炮流量",
                "val": "60L/s"
            }]
        }]
    }, {
        "cslbArr": [{
            "cslb": "规格参数",
            "csArr": [{
                "key": "机长",
                "val": "16m"
            }, {
                "key": "机宽",
                "val": "11m"
            }, {
                "key": "翼展",
                "val": "4.9m"
            }]
        }, {
            "cslb": "性能参数",
            "csArr": [{
                "key": "最大起飞重量",
                "val": "4800kg"
            }, {
                "key": "载员",
                "val": "16人"
            }, {
                "key": "最大速度",
                "val": "180km/h"
            }, {
                "key": "飞行高度",
                "val": "0.6-1.2m"
            }, {
                "key": "适航海况",
                "val": "3级"
            }]
        }]
    }];
    
    function isInArr(arr, item, key) {
        var sameItem;
        var isIn = arr.some(function (value) {
            if (value[key] == item[key]) {
                sameItem = value;
                return true;
            }
        });
        return [isIn, sameItem];
    }
    
    function rebuildArr(arr) {
        var newArr = [];
        arr.forEach((item1) => {
            item1["cslbArr"].forEach((item2) => {
                var [isIn1, sameItem] = isInArr(newArr, item2, "cslb");
                if (isIn1) {
                    item2["csArr"].forEach((item3) => {
                        var [isIn2, subItem] = isInArr(sameItem["csArr"], item3, "key");
                        if (isIn2) {
                            subItem["val"].push(item3["val"]);
                        } else {
                            if (typeof item3["val"] == "string") {
                                item3["val"] = [item3["val"]];
                            }
                            sameItem["csArr"].push(item3);
                        }
                    });
                } else {
                    item2["csArr"].forEach((value) => {
                        if (typeof value["val"] == "string") {
                            value["val"] = [value["val"]];
                        }
                    });
                    newArr.push(item2);
                }
            });
        });
        return newArr;
    }
    
    
    var newArr = rebuildArr(arr);
    console.log(JSON.stringify(newArr));
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码