簡體   English   中英

按 Java 中公共數組內的屬性對 json object 列表進行分組

[英]Group a list of json object by property inside the common Array in Java

我想問是否可以將 object 與另一個 object 組合在其公共陣列中。

這是 JSON 響應,我需要按程序 id項目列表進行分組。 我正在嘗試將其放在 HashMap 上,但效果不佳。

{
"id": "",
"ordered_by": 64,
"order_details": [
    {
        "resource": "Product",
        "required_prescription": false,
        "item": {
            "id": 6,
            "name": "Synergistic Copper Gloves",
            "code": "51537661-C",
            "enabled": true,
            "generic_name": "Mediocre Steel Wallet",
            "price_cents": 200000
        },
        "program": {
            "id": 12,
            "name": "Synergistic Wooden Shoes",
            "provider": "Synergistic Rubber Coat",
            "discount_type": "fixed"
        }
    },
    {
        "resource": "Product",
        "required_prescription": true,
        "item": {
            "id": 7,
            "name": "Rustic Leather Table",
            "code": "74283131-P",
            "enabled": true,
            "generic_name": "Incredible Bronze Clock",
            "price_cents": 8994
        },
        "program": {
            "id": 12,
            "name": "Synergistic Wooden Shoes",
            "provider": "Synergistic Rubber Coat",
            "discount_type": "fixed"
        }
    },
    {
        "resource": "Product",
        "required_prescription": false,
        "item": {
            "id": 116,
            "name": "Ergonomic Marble Hat",
            "code": "98845056-A",
            "enabled": true,
            "generic_name": "Incredible Granite Lamp",
            "price_cents": 8267
        },
        "program": {
            "id": 10,
            "name": "Durable Rubber Bag",
            "provider": "Aerodynamic Steel Chair",
            "discount_type": "fixed"
        }
    }
]}

這應該是分組后預期的 object。 該項目按程序 ID 12 和 10 分組。

[
  {
    "id": 12,
    "name": "Synergistic Wooden Shoes",
    "provider": "Synergistic Rubber Coat",
    "discount_type": "fixed",
    "item": [
      {
        "id": 6,
        "name": "Synergistic Copper Gloves",
        "code": "51537661-C",
        "enabled": true,
        "generic_name": "Mediocre Steel Wallet",
        "price_cents": 200000
      },
      {
        "id": 7,
        "name": "Rustic Leather Table",
        "code": "74283131-P",
        "enabled": true,
        "generic_name": "Incredible Bronze Clock",
        "price_cents": 8994
      }
    ]
  },
  {
    "id": 10,
    "name": "Durable Rubber Bag",
    "provider": "Aerodynamic Steel Chair",
    "discount_type": "fixed",
    "item": [
      {
        "id": 116,
        "name": "Ergonomic Marble Hat",
        "code": "98845056-A",
        "enabled": true,
        "generic_name": "Incredible Granite Lamp",
        "price_cents": 8267
      }
    ]
  }
]

所有評論將不勝感激。 提前致謝!

我已獲取您的源 json 並嘗試根據您的規范對其進行轉換,這是有效的解決方案,將您的源 JSON 作為字符串傳遞,您將獲得所需的 Z78E6221F6393D1356681DB398F14CE6D

private String parseJson(String source) {
    JSONArray result = new JSONArray();
    List<Integer> ids = new ArrayList<>();
    HashMap<Integer,JSONObject> programs = new HashMap<>();
    try {
        JSONObject jSource = new JSONObject(source);
        JSONArray orderDetails = jSource.getJSONArray("order_details");
        if (orderDetails.length() > 0) {
            for (int i = 0; i < orderDetails.length(); i++) {
                JSONObject jsonObject = orderDetails.getJSONObject(i);
                JSONObject item = jsonObject.getJSONObject("item");
                JSONObject program = jsonObject.getJSONObject("program");
                int programId = jsonObject.getJSONObject("program").getInt("id");
                if (!ids.contains(programId)) {
                    ids.add(programId);
                    program.put("item",new JSONArray().put(item));
                    programs.put(programId,program);
                }else{
                    program.put("item",programs.get(programId).getJSONArray("item").put(item));
                }
            }

            for(int k :programs.keySet()){
                result.put(programs.get(k));
            }

        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return result.toString();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM