Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Android中将动态平面JSON转换为层次JSON_Java_Android_Json - Fatal编程技术网

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

Java 在Android中将动态平面JSON转换为层次JSON,java,android,json,Java,Android,Json,又是我!根据其他程序员的建议,我应该更改JSON结构以填充可扩展的ListView。 这是我从HTTP Post获得的字符串: [{"titulo":"prueba1","nombrelinea":"cortecaballero","monto":"12"}, {"titulo":"prueba1","nombrelinea":"cortedama","monto":"15"}, {"titulo":"prueba1","nombrelinea":"corteni

又是我!根据其他程序员的建议,我应该更改JSON结构以填充可扩展的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字符串?

这应该可以做到:

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;
}
publicjsonarray convertMyCrappyJSON(JSONArray originalArray){
JSONArray newArray=新的JSONArray();
对于(int i=0;i

注意,它可能需要一些额外的编辑,但这应该会让您走上正轨。

那么您基本上得到了一个jsonarray对象,并希望它们按产品分组


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

感谢您的快速回答!Eclipse with Android Developer Tools v22.2.1-833290是否要重新排列由该字符串填充的java对象上的json字符串?这就是我想要的:-动态获取json字符串-重新排列-获取重新排列的字符串以将其发送给解析器。可以吗?谢谢!我正在测试它,现在我如何打印新数组的字符串?我试过使用字符串s=newArray.toString();TextView text=(TextView)findViewById(R.id.texto);text.setText(s);但是它给了我一个来自ADT.Ell的错误,我已经尝试在我的mainactivity上实现代码,但是对于我现有的代码来说似乎无法实现。有没有关于如何包含它的建议?