JSON格式字符串数组对象属性合并追加

本文介绍了一种将多个JSON格式的字符串数组对象属性进行合并的方法,通过遍历和比较,最终形成一个统一的数据结构,适用于产品属性的批量处理。
最近有个需求,需要把JSON格式字符串数组对象属性合并追加,需要的格式:

[{name='颜色', value=[白色, 黑色, 黄色]},{name='尺寸', value=[M, L, XL]},{name='布料', value=[纯棉]}]

合并前的json字符串

"[{\"key\":\"颜色\",\"value\":\"白色\"},{\"key\":\"尺寸\",\"value\":\"M\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
"[{\"key\":\"颜色\",\"value\":\"白色\"},{\"key\":\"尺寸\",\"value\":\"L\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
"[{\"key\":\"颜色\",\"value\":\"白色\"},{\"key\":\"尺寸\",\"value\":\"XL\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
"[{\"key\":\"颜色\",\"value\":\"黑色\"},{\"key\":\"尺寸\",\"value\":\"M\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
"[{\"key\":\"颜色\",\"value\":\"黑色\"},{\"key\":\"尺寸\",\"value\":\"L\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
"[{\"key\":\"颜色\",\"value\":\"黑色\"},{\"key\":\"尺寸\",\"value\":\"XL\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
"[{\"key\":\"颜色\",\"value\":\"黄色\"},{\"key\":\"尺寸\",\"value\":\"M\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
"[{\"key\":\"颜色\",\"value\":\"黄色\"},{\"key\":\"尺寸\",\"value\":\"L\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
"[{\"key\":\"颜色\",\"value\":\"黄色\"},{\"key\":\"尺寸\",\"value\":\"XL\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";

直接上代码:

public static void main(String[] args) {
    String aa = "[{\"key\":\"颜色\",\"value\":\"白色\"},{\"key\":\"尺寸\",\"value\":\"M\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
    String bb = "[{\"key\":\"颜色\",\"value\":\"白色\"},{\"key\":\"尺寸\",\"value\":\"L\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
    String bbb = "[{\"key\":\"颜色\",\"value\":\"白色\"},{\"key\":\"尺寸\",\"value\":\"XL\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
    String cc = "[{\"key\":\"颜色\",\"value\":\"黑色\"},{\"key\":\"尺寸\",\"value\":\"M\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
    String dd = "[{\"key\":\"颜色\",\"value\":\"黑色\"},{\"key\":\"尺寸\",\"value\":\"L\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
    String ddd = "[{\"key\":\"颜色\",\"value\":\"黑色\"},{\"key\":\"尺寸\",\"value\":\"XL\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
    String ee = "[{\"key\":\"颜色\",\"value\":\"黄色\"},{\"key\":\"尺寸\",\"value\":\"M\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
    String ff = "[{\"key\":\"颜色\",\"value\":\"黄色\"},{\"key\":\"尺寸\",\"value\":\"L\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
    String fff = "[{\"key\":\"颜色\",\"value\":\"黄色\"},{\"key\":\"尺寸\",\"value\":\"XL\"},{\"key\":\"布料\",\"value\":\"纯棉\"}]";
    JSONArray array = new JSONArray();
    JSONArray arrayA = JSONArray.parseArray(aa);
    JSONArray arrayB = JSONArray.parseArray(bb);
    JSONArray arrayBB = JSONArray.parseArray(bbb);
    JSONArray arrayC = JSONArray.parseArray(cc);
    JSONArray arrayD = JSONArray.parseArray(dd);
    JSONArray arrayDD = JSONArray.parseArray(ddd);
    JSONArray arrayE = JSONArray.parseArray(ee);
    JSONArray arrayF = JSONArray.parseArray(ff);
    JSONArray arrayFF = JSONArray.parseArray(fff);
    //所有的JSON合并到一个数组
    array.addAll(arrayA);
    array.addAll(arrayB);
    array.addAll(arrayBB);
    array.addAll(arrayC);
    array.addAll(arrayD);
    array.addAll(arrayDD);
    array.addAll(arrayE);
    array.addAll(arrayF);
    array.addAll(arrayFF);
    List<ProductPmsProductAttributeVo> list=new ArrayList<ProductPmsProductAttributeVo>();
    //遍历数组
    for (int i = 0; i < array.size(); i++) {
        //获取第一个对象的key值
       String key=array.getJSONObject(i).getString("key");
        //获取第一个对象的value值
       String value=array.getJSONObject(i).getString("value");
       //遍历已添加的key再比较value
       if(list.size()>0){
           //记录是否存在相同的key
           boolean isExit=false;
           //记录存在相同key的value
           String exitValue="";
           //记录第几个对象的key相同
           int obj=0;
           //遍历
           for (int j = 0; j < list.size(); j++){
               String voKey=list.get(j).getName();
               if(key.equals(voKey)){
                   isExit=true;
                   exitValue=value;
                   obj=j;
                   break;
               }
           }
           //存在相同的key值
           if(isExit){
               List<String> exitVaList=list.get(obj).getValue();
               //记录是否存在相同的value
               boolean isValueExit=false;
               //遍历value值是否存在
               for (int k = 0; k < exitVaList.size(); k++){
                   String exitVa=exitVaList.get(k);
                   if(exitValue.equals(exitVa)){
                       isValueExit=true;
                       break;
                   }
               }
               //value没有重复值 直接添加,value存在则不用再做操作
               if(!isValueExit){
                   //
                   list.get(obj).getValue().add(value);
               }
           }else{
               //不存在相同的key值,直接添加新key
               ProductPmsProductAttributeVo vo=new ProductPmsProductAttributeVo();
               vo.setName(key);
               List<String> vaList=new ArrayList<>();
               vaList.add(value);
               vo.setValue(vaList);
               list.add(vo);
           }
       }else{
           //第一次list会为0 直接添加新key和新value
           ProductPmsProductAttributeVo vo=new ProductPmsProductAttributeVo();
           vo.setName(key);
           List<String> vaList=new ArrayList<>();
           vaList.add(value);
           vo.setValue(vaList);
           list.add(vo);
       }
    }
    System.out.println(list);
}

ProductPmsProductAttributeVo :

 

public class ProductPmsProductAttributeVo implements Serializable {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "规格ID")
    private Long id;

    @ApiModelProperty(value = "规格名称")
    private String name;

    @ApiModelProperty(value = "规格值")
    private List<String> value;

    @Override
    public String toString() {
        return "ProductPmsProductAttributeVo{" +
                "name='" + name + '\'' +
                ", value=" + value +
                '}';
    }
}

执行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值