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
'programing' 카테고리의 다른 글
스프링 "spring.profiles.include" 오버라이드 (0) | 2023.04.02 |
---|---|
Reactjs의 미디어 쿼리 구문 (0) | 2023.04.02 |
WordPress 웹사이트에서 프런트 엔드에서 wp-admin/ajax.php 페이지에 액세스하면 403 오류가 나타난다. (0) | 2023.03.28 |
Facebook React에서 코드 재사용을 위해 mixins vs components 사용 (0) | 2023.03.28 |
3진 연산자의 각도 변환 필터 (0) | 2023.03.28 |