2015-07-21 62 views
0

大家好我需要你的帮助。我如何从我的JSON响应中删除这个?从json响应中移除对象Android

[ 
    { 
    "Woa": [ 
     "Seo", 
     "Rikjeo", 
     "JDa" 
    ] 
    }, 
"Aha", 
"Aad", 
"Char" 
] 

我想删除这个:

{ 
    "Woa": [ 
     "Seo", 
     "Rikjeo", 
     "JDa" 
    ] 
    } 

这是我试过到目前为止:

for (int i = 0; i < array.length(); ++i) { 
    list.add(array.getString(i)); 
} 

list.remove(0); 

但它仍然不会被删除。我怎么做?任何想法将不胜感激

编辑list.remove(1)至(0)

+0

所以你想要将有效的JSON数据转换为无效的数据? –

+0

你可以假设它是一个jsonarray,然后在jsArray会再次循环之后,获取0索引 –

回答

1

删除您需要重新创建JSON使用列表中的项目之后。

list.remove(1); 

JSONArray jsArray = new JSONArray(list); 

如果你想JSONArray转换成JSON字符串:

jsArray.toString() 
+0

上的对象? –

+0

如果你想仅仅进一步处理数组。 – Garry

+0

我几乎每天都会在同事面前遇到这个确切的问题:他们倾向于专门解决问题,如果他们如果原始问题稍有变化,他们的“修复”将不再起作用。或者更多,如果他们在稍有不同的情况下在不同的地方发现相同的问题,他们必须再次完成。他们的代码恰好适用于该问题的一个案例。而这正是这个答案所做的。程序员需要理解这一点:他们需要以一种通用的方式编码和解决问题,这样他们就不必在一个项目中复制粘贴50%的代码 – DDsix

0

你的列表将被更新,而不是你的JSON对象。

为什么不使用JSONparser

JSONObject obj = new JSONObject(mystring); 
obj.remove("entryname"); 
0

你应该做一些更一般的事情,所以你不必修改你的代码每次JSON改变。例如:

 //here we create the JSONArray object from the string that contains the json data 
     JSONArray array = new JSONArray(myJsonString); 

     //here we create a list that represents the final result - a list of Strings 
     List<String> list = new ArrayList<>(); 

     //here we parse every object that the JSONArray contains 
     for (int i = 0; i < array.length(); i++) { 

      //if the current item is an JSONObject, then we don't need it, so we continue our iteration 
      //this check is not necessary because of the below check, 
      //but it helps you see things clearly: we IGNORE JSONObjects from the array 
      if (array.get(i) instanceof JSONObject) { 
       continue; 
      } 

      //if our current object is a String, we add it to our final result 
      if (array.get(i) instanceof String) { 
       list.add(array.getString(i)); 
      } 
     } 
+0

你能解释每一行吗?谢谢 –

+0

我编辑过,所以你可以更好地理解。再次检查 – DDsix

+0

这根本不是真的。在粘贴之前,我测试了这个代码。我也邀请你来测试它。 JSONArray不仅包含JSONObject。它可以包含以下之一:Boolean,JSONArray,JSONObject,Number,String或JSONObject.NULL对象。你应该阅读一些Java文档:) – DDsix

0

一个问题是,您要删除的元素是第一位的,和JSONArray对象的第一个元素的索引是零。

您打电话给list.remove(1),它删除数组的第二个元素。

下应该足够了:

list.remove(0); 

...没有东西在它之前。

如果这不起作用,那么我的猜测是您要删除元素太晚;即JSONArray对象已被序列化。但是,我们需要看到更多(相关)代码。


JSONArray的Android文档没有提及数组索引是从零开始的。但是,它是。我检查了源代码。此外,大多数其他Java数据结构(数组,列表等)使用从零开始的索引。 (一个值得注意的例外是在W3C DOM API上建模的Java数据结构。)

0

您可以将字符串解析为JSONArray,该数组的第一个元素就是您想要的。

@Test 
public void test() { 
    String str = "[ {\"Woa\": [\"Seo\",\"Rikjeo\",\"JDa\"]},\"Aha\",\"Aad\",\"Char\"]"; 
    try { 
    JSONArray array; 
     array = new JSONArray(str); 
     System.out.println(array); 
     System.out.println(array.get(0)); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

[{ “吁”:[ “徐”, “Rikjeo”, “JDA”]}, “啊”, “阿德”, “字符”]

{ “吁” : “搜索引擎优化”, “Rikjeo”, “JDA”]}

通过:测试

0

您可以一个一个地删除

while (user_data.length() > 0) { 
    user_data.remove(user_data.keys().next()); 
}