2014-03-31 28 views
0

这又是我了!根据其他程序员的建议,我应该改变我的JSON结构来填充Expandable ListView。 这是字符串我从一个HTTP后得到:在Android中将动态平板JSON转换为JSON层次结构

[{"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"}]}] 

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

+0

你用什么IDE? –

+0

感谢您的快速回答! Eclipse与Android开发工具v22.2.1-833290 – EliGarcia

+0

您是否想重新安排由此字符串填充的java对象的json字符串? –

回答

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; 
} 

注意,它可能需要一些额外的编辑,但应该让你的轨道上。

+0

谢谢!即时通讯测试它,现在我怎么打印字符串新阵列?我试过 String s = newArray.toString(); \t TextView text =(TextView)findViewById(R.id.texto); \t text.setText(s); 但它给了我一个来自ADT的错误。 – EliGarcia

+0

你得到什么错误?... – Guardanis

+0

埃尔,我试图实现我的主要活动的代码,但它似乎无法访问我现有的代码。有关如何包含它的任何建议? – EliGarcia

0

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

您是否已经考虑将服务器输入解析为json对象,并根据产品创建另一个json对象。 iff json字符串是你的最终要求,你可以将这个第二个json OBJ转换为字符串并发送给定制解析器(如果有的话)。