在Android中将动态平面JSON转换为层次结构JSON

时间:2014-03-31 16:03:35

标签: java android json

再次,它是我的!根据其他程序员的建议,我应该更改我的JSON结构以填充Expandable ListView。 这是我从HTTP Post获得的字符串:

    [{"titulo":"prueba1","nombrelinea":"cortecaballero","monto":"12"},  
     {"titulo":"prueba1","nombrelinea":"cortedama","monto":"15"},
     {"titulo":"prueba1","nombrelinea":"corteniño","monto":"10"},
     {"titulo":"prueba2","nombrelinea":"tintecaballero","monto":"12"},
     {"titulo":"prueba2","nombrelinea":"tintedama","monto":"15"},
     {"titulo":"prueba2","nombrelinea":"tinteniño","monto":"10"},
     {"titulo":"prueba3","nombrelinea":"secadocaballero","monto":"12"},
     {"titulo":"prueba3","nombrelinea":"secadodama","monto":"15"},
     {"titulo":"prueba3","nombrelinea":"secadoniño","monto":"10"}]

但我需要它看起来像这样:

    [{"titulo":"prueba1","productos":[{"nombrelinea":"cortecaballero","monto":"12"},    
     {"nombrelinea":"cortedama","monto":"15"},
     {"nombrelinea":"corteniño","monto":"10"}]},{"titulo":"prueba2","productos":
    [{"nombrelinea":"tintecaballero","monto":"12"},
     {"nombrelinea":"tintedama","monto":"15"},
     {"nombrelinea":"tinteniño","monto":"10"}]},{"titulo":"prueba3","productos":
    [{"nombrelinea":"secadocaballero","monto":"12"},
     {"nombrelinea":"secadodama","monto":"15"},
     {"nombrelinea":"secadoniño","monto":"10"}]}]

有没有办法在JAVA / Android中重新排列JSON字符串?

2 个答案:

答案 0 :(得分:0)

这应该这样做:

public JSONArray convertMyCrappyJSON(JSONArray originalArray){
    JSONArray newArray = new JSONArray();
    for(int i = 0; i < originalArray.length(); i++){
        try{
            JSONObject currentObject = originalArray.getJSONObject(i);
            JSONObject mappedObj = findObjectInAdded(newArray, currentObject.getString("titulo"));
            if(mappedObj == null){
                JSONArray newSubArray = new JSONArray();

                mappedObj = new JSONObject();
                mappedObj.put("titulo", currentObject.getString("titulo"));

                JSONObject productObj = new JSONObject();
                productObj.put("nombrelinea", currentObject.getString("nombrelinea"));
                productObj.put("monto", currentObject.getString("monto"));

                newSubArray.put(productObj);
                mappedObj.put("productos", newSubArray);
            }
            else{
                JSONObject productObj = new JSONObject();
                productObj.put("nombrelinea", currentObject.getString("nombrelinea"));
                productObj.put("monto", currentObject.getString("monto"));

                mappedObj.getJSONArray("productos").put(productObj);
            }
        }
        catch(Exception e){

        }
    }
    return newArray;
}

public JSONObject findObjectInAdded(JSONArray updatedArray, String titleToSearchFor) throws JSONException{
    for(int i = 0; i < updatedArray.length(); i++){
        if(updatedArray.getJSONObject(i).getString("titulo").equals(titleToSearchFor)) return updatedArray.getJSONObject(i);
    }
    return null;
}

请注意,它可能需要一些额外的编辑,但这应该让您按计划进行。

答案 1 :(得分:0)

所以你基本上得到了一个对象的jsonarray,并希望它们按产品分组?

您是否考虑过按原样将服务器输入解析为json对象,创建另一个json对象,您可以根据产品对它们进行分组。 iff json string是您的最终要求,您可以将第二个json OBJ转换为字符串并将其发送到自定义解析器(如果有)。