我正在构建一个应用程序,我从服务器请求一个PHP文件。此PHP文件返回一个JSONArray,其中包含JSONObjects作为其元素,例如
[
{
"uniqid":"h5Wtd",
"name":"Test_1",
"address":"tst",
"email":"ru_tst@tst.cc",
"mobile":"12345",
"city":"ind"
},
{...},
{...},
...
]
我的代码:
/* jArrayFavFans is the JSONArray i build from string i get from response.
its giving me correct JSONArray */
JSONArray jArrayFavFans=new JSONArray(serverRespons);
for (int j = 0; j < jArrayFavFans.length(); j++) {
try {
if (jArrayFavFans.getJSONObject(j).getString("uniqid").equals(id_fav_remov)) {
//jArrayFavFans.getJSONObject(j).remove(j); //$ I try this to remove element at the current index... But remove doesn't work here ???? $
//int index=jArrayFavFans.getInt(j);
Toast.makeText(getParent(), "Object to remove...!" + id_fav_remov, Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
如何从此JSONArray中删除特定元素?
答案 0 :(得分:40)
试试此代码
ArrayList<String> list = new ArrayList<String>();
JSONArray jsonArray = (JSONArray)jsonObject;
int len = jsonArray.length();
if (jsonArray != null) {
for (int i=0;i<len;i++){
list.add(jsonArray.get(i).toString());
}
}
//Remove the element from arraylist
list.remove(position);
//Recreate JSON Array
JSONArray jsArray = new JSONArray(list);
修改强>
使用ArrayList
会将"\"
添加到键和值中。所以,使用JSONArray
本身
JSONArray list = new JSONArray();
JSONArray jsonArray = new JSONArray(jsonstring);
int len = jsonArray.length();
if (jsonArray != null) {
for (int i=0;i<len;i++)
{
//Excluding the item at position
if (i != position)
{
list.put(jsonArray.get(i));
}
}
}
答案 1 :(得分:18)
如果有人针对Android平台返回相同的问题,如果您的目标是Android API-18或更低版本,则无法使用内置的remove()
方法。在API级别19上添加了remove()
方法。因此,最好的做法是扩展JSONArray
以为remove()
方法创建兼容的覆盖。
public class MJSONArray extends JSONArray {
@Override
public Object remove(int index) {
JSONArray output = new JSONArray();
int len = this.length();
for (int i = 0; i < len; i++) {
if (i != index) {
try {
output.put(this.get(i));
} catch (JSONException e) {
throw new RuntimeException(e);
}
}
}
return output;
//return this; If you need the input array in case of a failed attempt to remove an item.
}
}
修改强> 正如丹尼尔指出的那样,默默地处理错误是一种糟糕的风格。代码改进了。
答案 2 :(得分:3)
public static JSONArray RemoveJSONArray( JSONArray jarray,int pos) {
JSONArray Njarray=new JSONArray();
try{
for(int i=0;i<jarray.length();i++){
if(i!=pos)
Njarray.put(jarray.get(i));
}
}catch (Exception e){e.printStackTrace();}
return Njarray;
}
答案 3 :(得分:1)
我猜你正在使用我的版本,我建议在你的代码中手动添加这个功能块(JSONArray.java):
public Object remove(int index) {
Object o = this.opt(index);
this.myArrayList.removeElementAt(index);
return o;
}
在java版本中,他们使用ArrayList,在ME版本中他们使用Vector。
答案 4 :(得分:1)
JSONArray jArray = new JSONArray();
jArray.remove(position); // For remove JSONArrayElement
注意: - 如果remove()
中没有JSONArray
那么......
调用需要API级别19(当前最小值为16):org.json.JSONArray #remove
项目上的右键单击转到属性
从左侧网站选项中选择Android
选择项目构建目标大于API 19
希望它对你有所帮助。
答案 5 :(得分:1)
您可以使用反射
中文网站提供相关解决方案:http://blog.csdn.net/peihang1354092549/article/details/41957369
如果您不懂中文,请尝试使用翻译软件阅读。
他为旧版本提供此代码:
SimpleDateFormat date_0 = new SimpleDateFormat("yyMMdd");
Date date_1 = new Date();
date_1.setDate(date_1.getDay()-1);
long date_t = Long.valueOf(date_0.format(date_1));
答案 6 :(得分:1)
在我的情况下,我想删除状态为非零值的jsonobject,所以我做了一个函数&#34; removeJsonObject&#34;它接受旧的json并提供所需的json并在constuctor中调用该函数。
public CommonAdapter(Context context, JSONObject json, String type) {
this.context=context;
this.json= removeJsonObject(json);
this.type=type;
Log.d("CA:", "type:"+type);
}
public JSONObject removeJsonObject(JSONObject jo){
JSONArray ja= null;
JSONArray jsonArray= new JSONArray();
JSONObject jsonObject1=new JSONObject();
try {
ja = jo.getJSONArray("data");
} catch (JSONException e) {
e.printStackTrace();
}
for(int i=0; i<ja.length(); i++){
try {
if(Integer.parseInt(ja.getJSONObject(i).getString("status"))==0)
{
jsonArray.put(ja.getJSONObject(i));
Log.d("jsonarray:", jsonArray.toString());
}
} catch (JSONException e) {
e.printStackTrace();
}
}
try {
jsonObject1.put("data",jsonArray);
Log.d("jsonobject1:", jsonObject1.toString());
return jsonObject1;
} catch (JSONException e) {
e.printStackTrace();
}
return json;
}
答案 7 :(得分:0)
要从android中的Listview中删除某些元素,则它将删除您的特定元素并将其绑定到Listview。
BookinhHistory_adapter.this.productPojoList.remove(position);
BookinhHistory_adapter.this.notifyDataSetChanged();
答案 8 :(得分:0)
We can use iterator to filter out the array entries instead of creating a new Array.
'public static void removeNullsFrom(JSONArray array) throws JSONException {
if (array != null) {
Iterator<Object> iterator = array.iterator();
while (iterator.hasNext()) {
Object o = iterator.next();
if (o == null || o == JSONObject.NULL) {
iterator.remove();
}
}
}
}'
答案 9 :(得分:0)
static JSONArray removeFromJsonArray(JSONArray jsonArray, int removeIndex){
JSONArray _return = new JSONArray();
for (int i = 0; i <jsonArray.length(); i++) {
if (i != removeIndex){
try {
_return.put(jsonArray.getJSONObject(i));
} catch (JSONException e) {
e.printStackTrace();
}
}
}
return _return;
}