サーバーからPHPファイルを要求する1つのアプリを作成しています。このPHPファイルは、要素としてJSONObjectsを持つJSONArrayを返します。
[
{
"uniqid":"h5Wtd",
"name":"Test_1",
"address":"tst",
"email":"[email protected]",
"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から特定の要素を削除するにはどうすればよいですか?
このコードを試してください
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));
}
}
}
Androidプラットフォームについて同じ質問で誰かが戻ってきた場合、Androidをターゲットにしている場合、組み込みのremove()
メソッドを使用できませんAPI-18以下:remove()
メソッドはAPIレベル19に追加されます。したがって、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.
}
}
[〜#〜] edit [〜#〜]ダニエルが指摘したように、エラーを静かに処理するのは悪いスタイルです。コードが改善されました。
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;
}
_ JSONArray jArray = new JSONArray();
jArray.remove(position); // For remove JSONArrayElement
_
注:-remove()
がJSONArray
にない場合は...
Android(4.4)のAPI 19は、実際にこのメソッドを許可します。
呼び出しにはAPIレベル19(現在の最小値は16)が必要です:org.json.JSONArray#remove
右クリックプロジェクトのプロパティに移動
左のサイトからAndroidオプションを選択します
そして、API 19よりも大きいプロジェクトビルドターゲットを選択します
お役に立てば幸いです。
リフレクションを使用できます
中国のWebサイトは、関連するソリューションを提供しています。 http://blog.csdn.net/peihang1354092549/article/details/41957369
中国語がわからない場合は、翻訳ソフトウェアで中国語を読んでみてください。
彼は古いバージョンのためにこのコードを提供します:
public void JSONArray_remove(int index, JSONArray JSONArrayObject) throws Exception{
if(index < 0)
return;
Field valuesField=JSONArray.class.getDeclaredField("values");
valuesField.setAccessible(true);
List<Object> values=(List<Object>)valuesField.get(JSONArrayObject);
if(index >= values.size())
return;
values.remove(index);
}
私はあなたがMeバージョンを使用していると思う、私はあなたのコード(JSONArray.Java)にこの機能ブロックを手動で追加することを提案する:
public Object remove(int index) {
Object o = this.opt(index);
this.myArrayList.removeElementAt(index);
return o;
}
JavaバージョンではArrayListを使用し、MEバージョンではVectorを使用します。
私の場合、ステータスがゼロ以外の値のjsonobjectを削除したかったので、古いjsonを取得し、必要なjsonを提供する関数「removeJsonObject」を作成し、コンストラクター内でその関数を呼び出しました。
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;
}