簡體   English   中英

如何在JAVA中將一個JSON數組重構為其他格式?

[英]How do i refactor one JSON array into other format in JAVA?

我有一個像這樣的JSON數組,

JSONArray content=
"[
{"+"\"pageid\":\"19\","+"\"company\":"+"\"C1\","+"\"pageview\":"+"\"10\","+"\"visitfreq\":"+"\"2\"},{"+"\"pageid\":\"19\","+"\"company\":"+"\"C2\","+"\"pageview\":"+"\"20\","+"\"visitfreq\":"+"\"4\"},{"+"\"pageid\":\"200\","+"\"company\":"+"\"C3\","+"\"pageview\":"+"\"30\","+"\"visitfreq\":"+"\"3\"}
]";

JSONArray的代碼:

JSONObject jObj1 = new JSONObject();
jObj1.put("pageid", "19");
jObj1.put("company", "C1");
jObj1.put("pageview", "10");
jObj1.put("visitfreq", "2");

JSONObject jObj2 = new JSONObject();
jObj2.put("pageid", "19");
jObj2.put("company", "C2");
jObj2.put("pageview", "20");
jObj2.put("visitfreq", "4");

JSONObject jObj3 = new JSONObject();
jObj3.put("pageid", "200");
jObj3.put("company", "C3");
jObj3.put("pageview", "30");
jObj3.put("visitfreq", "3");

JSONArray jArr = new JSONArray();
jArr.put(jObj1);
jArr.put(jObj2);
jArr.put(jObj3);

視覺表現:

[
    {
        "company": "C1",
        "visitfreq": "2",
        "pageview": "10",
        "pageid": "19"
    },
    {
        "company": "C2",
        "visitfreq": "4",
        "pageview": "20",
        "pageid": "19"
    },
    {
        "company": "C3",
        "visitfreq": "3",
        "pageview": "30",
        "pageid": "200"
    }
]

我已經努力使它像下面這樣輸出

這樣的輸出

[{pageid},[{rest of details}] ,{pageid},[{rest of details}] ]

如果同一個pageid出現多次
應該是這樣

[{pageid},[{rest of details1},{rest of details2},.. ],{pageid},[{rest of details}] ]

看來您需要創建一個映射pageid : [{rest of details1},{rest of details2},.. ]Map pageid : [{rest of details1},{rest of details2},.. ]

獲得該Map ,可以將其轉換為所需的輸出。 這是將采用JSONArray (上面的代碼中的一個)並將其轉換為Map<String, JSONArray>

public Map<String, JSONArray> getJsonArrayAsMapOnPageId(JSONArray inputArr) throws JSONException {
    //Map holding pageid : [{company:"",pageview:"",visitfreq:""}, ... , ...] mappings
    Map<String, JSONArray> idMap = new HashMap<String, JSONArray>();

    for (int i=0; i < inputArr.length(); i++) {
        JSONObject inputObj = inputArr.getJSONObject(i);

        String id = inputObj.getString("pageid");

        JSONArray jObjList;
        if (idMap.containsKey(id)) {
            //append to existing list in the Map
            jObjList = idMap.get(id);
        } else {
            //create new list
            jObjList = new JSONArray();
        }

        JSONObject newJsonObj = new JSONObject();
        newJsonObj.put("company", inputObj.get("company"));
        newJsonObj.put("pageview", inputObj.get("pageview"));
        newJsonObj.put("visitfreq", inputObj.get("visitfreq"));

        jObjList.put(newJsonObj);

        idMap.put(id, jObjList);
    }

    return idMap;
}

外觀如下:

System.out.println("Map looks like:\n" + pageidMap);

這是我得到的:

{
    200=[
        {
            "company": "C3",
            "visitfreq": "3",
            "pageview": "30"
        }
    ],
    19=[
        {
            "company": "C1",
            "visitfreq": "2",
            "pageview": "10"
        },
        {
            "company": "C2",
            "visitfreq": "4",
            "pageview": "20"
        }
    ]
}

我不確定您希望此輸出采用哪種形式(對象,打印到輸出等),因此可以完成將Map<String, JSONArray>轉換為[{pageid},[{rest of details1},{rest of details2},.. ],{pageid},[{rest of details}] ]沒有問題。

暫無
暫無

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

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