【问题标题】:Remove dublicates value from json array in android从android中的json数组中删除重复值
【发布时间】:2020-09-29 17:15:16
【问题描述】:

[{"product_name":"13X25","ask_size":0,"product_id":"5","category_id":"1","quantity":"10","图片":null,"description":"","product_pdf":null,"head":"MARSHAL","price":"22.00","user_quantity":"2"},{"product_name":"14X25 ","ask_size":0,"product_id":"6","category_id":"1","quantity":"12","image":null,"description":"","product_pdf":null ,"head":"MARSHAL","price":"23.00","user_quantity":"1"},{"product_name":"14X25 C","ask_size":0,"product_id":"2", "category_id":"1","quantity":"23","image":null,"description":"","product_pdf":null,"head":"KANGARO","price":"22.00" ,"user_quantity":"0"},{"product_name":"17X25 C","ask_size":0,"product_id":"1","category_id":"1","quantity":"18", "image":null,"description":"","product_pdf":null,"head":"HOKO","price":"12.00","user_quantity":"0"}]

这是我的 JSON 数组 如果某个键已经存在,我想删除它

有一个名为“head”的密钥:“MARSHAL”,这个密钥来了两次,但我只想取一次。

如果它来了,那么它必须从其他 JSONObject 中自动删除,不仅仅是一个键

如果它们被重复也可以是其他键,那么我只想要它们一次,然后将该 JSON 数据添加到列表中

我怎样才能为安卓做到这一点?

我想将此数据显示到 cardView 适配器中

【问题讨论】:

  • 你发的json没问题,是一个4个json对象的数组,而且都只有一个head键。
  • 是的,但我想删除它重复的那个键
  • 您只想删除键或整个对象条目?
  • 我想删除密钥,例如有一个名为“head”的密钥:“MARSHAL”,这是两次我想删除第二次,我希望每次都发生这种情况跨度>
  • 我知道这个json来自后端对吧?然后你有一个后端问题

标签: java android json


【解决方案1】:

首先,将您的 JSON 转换为 List>。 您可以使用 ObhectMapper 来执行此操作。

import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.File;
import java.io.IOException;
import java.util.*;

public class Test {
  private static ObjectMapper mapper = new ObjectMapper();

  public static void main(String[] args) throws IOException {
    List<Map<String, String>> listOfMap = createListMap();

    Map<String, List<String>> tempMap = new HashMap<>();
    listOfMap.forEach(
        map -> {
          Set<String> keySet = new HashSet<>(map.keySet());
          keySet.forEach(
              key -> {
                List<String> tempValue = tempMap.get(key);
                if (Objects.nonNull(tempValue) && tempValue.contains(map.get(key))) {
                  map.remove(key);
                } else {
                  tempMap.put(key, Arrays.asList(map.get(key)));
                }
              });
        });
    System.out.println(createListMap(listOfMap));
  }

  private static List<Map<String, String>> createListMap() throws IOException {
    File jsonFile = new File("src/main/resources/input.json");
    return mapper.readValue(jsonFile, new TypeReference<List<Map<String, String>>>() {});
  }

  private static String createListMap(List<Map<String, String>> listOfMap) throws IOException {
    return mapper.writeValueAsString(listOfMap);
  }
}

以下是您的输入 JSON 的输出。

[{"product_name":"13X25","ask_size":"0","product_id":"5","category_id":"1","quantity":"10","image":null ,"description":"","product_pdf":null,"head":"MARSHAL","price":"22.00","user_quantity":"2"},{"product_name":"14X25","product_id ":"6","quantity":"12","price":"23.00","user_quantity":"1"},{"product_name":"14X25 C","product_id":"2","quantity":"23","head":"KANGARO","price":"22.00","user_quantity":"0"},{"product_name":" 17X25 C","product_id":"1","quantity":"18","head":"HOKO","price":"12.00"}]

愿这能达到你的目的。

【讨论】:

  • 我需要 ObjectMapper 的任何依赖项,能否请您发布完整的代码以便我能正确理解它
  • OnjectMapper 的用户 jackson-databind 库。
  • 你能告诉我如何将它添加到 POJO 列表并将其用于适配器类
  • 我已经通过 usind volley 从服务器获取了这些数据
  • 您能否根据您的所有要求更新问题?因为根据您的问题,我已经为您提供了解决方案。现在,如果您需要进一步的帮助,那么您需要详细说明该部分。
猜你喜欢
  • 1970-01-01
  • 2016-01-05
  • 1970-01-01
  • 2014-10-10
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
  • 2018-10-26
相关资源
最近更新 更多