programing

JSONARray에서 특정 요소를 제거하려면 어떻게 해야 합니까?

lastmoon 2023. 3. 28. 22:32
반응형

JSONARray에서 특정 요소를 제거하려면 어떻게 해야 합니까?

서버에 PHP 파일을 요청하는 앱을 하나 만들고 있습니다.이 PHP 파일은 JSONObjects를 요소로 하는 JSONArray를 반환합니다.

[ 
  {
    "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();
  }
}

이 JSONAray에서 특정 요소를 제거하려면 어떻게 해야 합니까?

이 코드를 사용해 보세요.

ArrayList<String> list = new ArrayList<String>();     
JSONArray jsonArray = (JSONArray)jsonObject; 

if (jsonArray != null) { 
   int len = jsonArray.length();
   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 플랫폼에 대해 같은 질문을 한 사람이 다시 올 경우 기본 제공 기능을 사용할 수 없습니다.remove()Android 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.
     }
}

편집 다니엘이 지적한 것처럼, 에러를 묵묵히 처리하는 것은 좋지 않은 스타일입니다.코드가 개선되었습니다.

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

주의: - Ifremove()에 없다JSONArray그러면...

Android의 API 19(4.4)에서는 실제로 이 방법을 사용할 수 있습니다.

콜에는 API 레벨 19(현재 최소값은 16): org.json이 필요합니다.JSONARay #삭제

Project 우클릭 속성으로 이동

왼쪽 사이트에서 Android 선택 옵션

API 19보다 큰 프로젝트 빌드 타깃을 선택합니다.

도움이 되길 바랍니다.

Me 버전을 사용하고 있는 것 같습니다.이 기능의 블록을 수동으로 코드(JSONArray.java)에 추가하는 것을 추천합니다.

public Object remove(int index) {
    Object o = this.opt(index);
    this.myArrayList.removeElementAt(index);
    return o;
}

Java 버전에서는 ArrayList를 사용하고 ME 버전에서는 Vector를 사용합니다.

반사를 사용할 수 있습니다.

중국 웹사이트에서 관련 솔루션을 제공하고 있습니다.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);
}

저의 경우 상태가 0이 아닌 json 객체를 삭제하고 싶었기 때문에 오래된 json을 가져와 필요한 json을 부여하고 그 함수를 constutor 내에서 호출하는 함수 "removeJson Object"를 만들었습니다.

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

Android의 Listview에서 일부 요소를 제거하려면 특정 요소를 제거하고 Listview에 바인딩합니다.

BookinhHistory_adapter.this.productPojoList.remove(position);

BookinhHistory_adapter.this.notifyDataSetChanged();
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();
                        }
                    }
                }
            }'
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;
}

언급URL : https://stackoverflow.com/questions/8820551/how-do-i-remove-a-specific-element-from-a-jsonarray

반응형