代码之家  ›  专栏  ›  技术社区  ›  Karthikeyan

使用java将jsonobjects添加到jsonarray时避免重复

  •  0
  • Karthikeyan  · 技术社区  · 7 年前

    我有一个对象列表,正在转换为jsonarray。我在jsonobjects上迭代并生成一个jsonobjects数组。

    现在,我想避免重复的对象被插入到jsonarray中。

    请在下面找到我的Java代码。

    JSONArray responseArray1 = new JSONArray();
    if (!itemList.isEmpty())
    {
      jsonArray = new JSONArray(itemList);
      for (int i = 0; i < jsonArray.length(); i++)
      {
        JSONObject jsonObj = jsonArray.getJSONObject(i);
        JSONObject responseObj = new JSONObject();
        String attr_label = jsonObj.optString("attr_label");
        if(StringUtils.equalsIgnoreCase(attr_label, "long_description")) {
            long_description = jsonObj.optString("value");
        }
        else if(StringUtils.equalsIgnoreCase(attr_label, "description")) {
            description = jsonObj.optString("value");
        }
        responseObj.put("id", jsonObj.opt("id")); // i will get duplicate id
        responseObj.put("code", jsonObj.opt("code")); // i will get duplicate code
        responseObj.put("long_description", long_description);
        responseObj.put("description", description);
        responseArray1.put(responseObj);
    
      }
    }
    

    请找到我真正的Jsonarray:

    [  
       {  
          "code":"xyaz",
          "attr_label":"long_description",
          "id":"12717",
          "value":"Command Module"
       },
       {  
          "code":"xyaz",
          "attr_label":"description",
          "id":"12717",
          "value":"Set Point Adjustment"
       },
    ]
    

    我期待着像下面这样的安排:

    [  
       {  
          "code":"xyaz",
          "id":"12717",
          "long_description":"Command Module"
          "description" : "Set Point Adjustment"
       }
    ]
    

    更新:

    为了避免重复插入 id &安培 code 字段。但工作不正常。它还插入了副本。

    List<String> dummyList=new ArrayList<String>();
    JSONArray responseArray2 = new JSONArray(itemList);
    if (!itemList.isEmpty())
    {
      jsonArray = new JSONArray(itemList);
      for (int i = 0; i < jsonArray.length(); i++)
      {
        JSONObject jsonObj = jsonArray.getJSONObject(i);
        JSONObject responseObj = new JSONObject();
    
        String itemCode = jsonObj.optString("code");
        String id = jsonObj.optString("id");
        if(!dummyList.contains(itemCode) && !dummyList.contains(id) ) {
        dummyList.add(String.valueOf(jsonObj.opt("id")));
        dummyList.add(String.valueOf(jsonObj.opt("code")));
        responseObj.put("id", jsonObj.opt("id"));
        responseObj.put("code", jsonObj.opt("code"));
        responseObj.put("long_description", long_description);
        responseObj.put("description", description);
        responseArray2.put(responseObj);
        }
      }
    }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Himanshu itmca    7 年前

    制作一个临时数组列表并在该数组中添加唯一代码并检查它是否已经存在于ARARYList中,然后不要再放这个

    String code = jsonObj.opt("code");
    if(!arrayList.contains(code))
    {
        arrayList.add(code);
        responseObj.put("id", jsonObj.opt("id")); 
        responseObj.put("code", jsonObj.opt("code")); 
        responseObj.put("long_description", long_description);
        responseObj.put("description", description);
    }
    
        2
  •  -1
  •   Vishal Monga    7 年前

    使用treeset并将comparator添加到其构造函数中,在该构造函数中比较对象的重复数据。 例如:

         Set<Sample> sampleSet=new TreeSet<>(new Sample());
    

    如果示例类看起来像:

     class Sample implements Camparator<Sample>{
        private String name;
        private String id;
       //getter 
       //setter
    
        @Override
        public String compare(Sample o1,Sample o2){
            return o1.getName.compareTo(o2.getName);
        }
        }
    

    这将给出一组唯一的名称条目。