payz mall
payz mall

Reputation: 51

Remove dublicates value from json array in android

This is current result THIS IS REQUIRE RESULT[{"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","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"}]

This is my JSON array Where I want to remove a particular key if it is already exist

There is a key named "head": "MARSHAL", This Key comes two times but I want to fetch it only one time.

If it's coming then it must be removed automatically from other JSONObject, Not only for one key

it can be to other keys also if they get repeated then I want them only one time and after that add that JSON data to the list

How can I do it for android?

I want to show this data into cardView adapter

Upvotes: 0

Views: 60

Answers (1)

mevada.yogesh
mevada.yogesh

Reputation: 1128

First of all, convert your JSON to List<Map<String, Object>>. You can use ObhectMapper to do so.

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);
  }
}

Below is the output for your input 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"}]

May this serves your purpose.

Upvotes: 2

Related Questions