Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

329
Visualizações
Split data in JSON file based on a key value using java

I have a json file with which has an array of product items i want to split them based on the category of the item, This is my json file looks like,

{
    "items":[
        {
            "item-id": 123,
            "name": "Cheese",
            "price": 8,
            "category": "Dairy" 
        },
        {
            "item-id": 124,
            "name": "Milk",
            "price": 23,
            "category": "Dairy"
        },
        {
            "item-id": 125,
            "name": "Chicken",
            "price": 100,
            "category": "Meat"
        },
        {
            "item-id": 126,
            "name": "Fish",
            "price": 45,
            "category": "Meat"
        }
    ]
}

i want to split them like like this,

[
    {
        "category":"Dairy",
        "items":[
            {
                "item-id": 123,
                "name": "Cheese",
                "price": 8,
                "category": "Dairy" 
            },
            {
                "item-id": 124,
                "name": "Milk",
                "price": 23,
                "category": "Dairy"
            }
        ]
    },
    {
        "category":"Meat",
        "items":[
            {
                "item-id": 125,
                "name": "Chicken",
                "price": 100,
                "category": "Meat"
            },
            {
                "item-id": 126,
                "name": "Fish",
                "price": 45,
                "category": "Meat"
            }
        ]
    }
]

this is the code i tried so far but can't find way to split them like the way i wanted, I'm using java and also i am new to java

import java.io.*; 
import java.util.*;
import org.json.simple.*;
import org.json.simple.parser.*;

public class ReadOrderDetails {

    @SuppressWarnings("unused")
    public static void main(String[] args) {
        JSONParser parser = new JSONParser();
        JSONObject subOrder = new JSONObject();
        JSONArray  gitems = new JSONArray();
        JSONArray  subOrders = new JSONArray();
        
        try {
            Object obj = parser.parse(new FileReader("order-details.json"));
            JSONObject jsonObject = (JSONObject)obj;
            String orderId = (String)jsonObject.get("orderId");
            JSONArray items = (JSONArray)jsonObject.get("items");
            @SuppressWarnings("rawtypes")
            Iterator iterator = items.iterator();
            System.out.println("Order Id: " + orderId);
            while(iterator.hasNext()) {
                JSONObject item = (JSONObject)iterator.next();
                if(subOrders.isEmpty()) {
                    subOrder.put("category", item.get("category"));
                    gitems.add(item);
                    subOrder.put("items", gitems);
                    subOrders.add(subOrder);
                } else {
                    Iterator subOrdersIterator = subOrders.iterator();
                    for(int i=0; i<subOrders.size(); i++) {
                        JSONObject sitem = (JSONObject) subOrdersIterator.next();
                        if(sitem.get("category") == item.get("category")) {
                            gitems.add(item);
                            subOrder.put("items", gitems);
                            subOrders.add(subOrder);
                        } else {
                            subOrder.put("category", item.get("category"));
                            gitems.add(item);
                            subOrder.put("items", gitems);
                            subOrders.add(subOrder);
                        }
                    }
                }
                
            }
        } catch(Exception e) {
            e.printStackTrace();
        }
        System.out.println(subOrders);
    }

}



and also i'm getting an error at java.util.ConcurrentModificationException but that's not my main question, what i really wnated a way to split them i tried couple of things didn't working

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

You can't alter a collection while iterating it. Try this:

                Object[] subOrderArray = subOrders.toArray();
                for(Object o: subOrderArray) {
                    JSONObject sitem = (JSONObject) o;
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda