Tengo un archivo json con una variedad de elementos de productos que quiero dividir en función de la categoría del elemento. Este es mi archivo json.
{ "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" } ] }quiero dividirlos así,
[ { "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" } ] } ]este es el código que probé hasta ahora pero no puedo encontrar la manera de dividirlos como quería, estoy usando java y también soy nuevo en 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); } }y también recibo un error en java.util.ConcurrentModificationException , pero esa no es mi pregunta principal, lo que realmente quería era una forma de dividirlos. Probé un par de cosas que no funcionaron.
No puede alterar una colección mientras la itera. Prueba esto:
Object[] subOrderArray = subOrders.toArray(); for(Object o: subOrderArray) { JSONObject sitem = (JSONObject) o;