2012-01-11 8 views
16

मैं एक ऐप बना रहा हूं जिसमें मैं सर्वर से एक PHP फ़ाइल का अनुरोध करता हूं। इस PHP फ़ाइल, उसके तत्वों जैसे के रूप में एक JSONArray होने 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 से किसी विशिष्ट तत्व निकालते हैं?

उत्तर

31

इस कोड का प्रयास करें

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

मैं लगता है कि आप मेरे प्रयोग कर रहे हैं संस्करण, मेरा सुझाव है मैन्युअल रूप से समारोह के इस खंड को जोड़ने के लिए अपने कोड (JSONArray.java) में,: जावा संस्करण में

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

वे एमई संस्करण में, वेरेक्टर का उपयोग करते हुए, ऐरेलिस्ट का उपयोग करें।

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; 

} 
15

मामले में अगर किसी को एंड्रॉयड प्लेटफॉर्म के लिए एक ही सवाल के साथ देता है, अगर आप एंड्रॉयड एपीआई-18 या उससे कम के लिए लक्षित कर रहे हैं इनबिल्ट remove() विधि का उपयोग नहीं कर सकते हैं। remove() विधि एपीआई स्तर 1 9 पर जोड़ा गया है। इस प्रकार, remove() विधि के लिए संगत ओवरराइड बनाने के लिए JSONArray का विस्तार करना सबसे अच्छा संभव काम है।

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

संपादित डैनियल के रूप में बताया, एक त्रुटि हैंडलिंग चुपचाप बुरा शैली है। कोड में सुधार हुआ।

+1

यह खराब कोडिंग शैली है। किसी त्रुटि के मामले में, तत्व को हटाया नहीं जाता है, लेकिन invoking कोड को यह जानने का कोई मौका नहीं है। एक बेहतर तरीका है _not_ का उपयोग करने की कोशिश करें .. पकड़ें लेकिन फ़ंक्शन हेडर में 'JSONException' फेंकने का उपयोग करके –

+1

@DanielAlder 'निकालें' विधि अपवाद नहीं फेंक सकती है क्योंकि ओवरराइड विधि ऐसा नहीं करती है। –

+1

ठीक है, इस मामले में मैं 'e.printStackTrace() के बजाय 'नया रनटाइम अपवाद (ई)' (या' InternalError') फेंक दूंगा; इसे वापस कर दें; '- बस मामले के लिए –

2
JSONArray jArray = new JSONArray(); 

    jArray.remove(position); // For remove JSONArrayElement 

नोट: - तो remove() वहाँ तो JSONArray में नहीं ...

एंड्रॉयड (4.4) से एपीआई 19 वास्तव में इस विधि की अनुमति देता है।

कॉल एपीआई स्तर 19 (वर्तमान मिनट 16 है) की आवश्यकता है: सही छोड़ दिया साइट विकल्प से

एंड्रॉयड का चयन करें गुण

करने पर परियोजना जाएँ पर क्लिक करें org.json.JSONArray # हटाने

और एपीआई 1 9

उम्मीद है कि यह आपकी मदद करता है और अधिक परियोजना प्रोजेक्ट लक्ष्य का चयन करें।

0

परावर्तन

एक चीनी वेबसाइट एक प्रासंगिक समाधान प्रदान करता है का उपयोग कर सकते हैं: 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); 
} 
1

मेरे मामले में मैं गैर शून्य मान के रूप में स्थिति के साथ JSONObject दूर करने के लिए चाहता था, था तो क्या मैं एक समारोह "removeJsonObject" जो वर्ष json लेता किया जाता है और आवश्यक जेसन देता है और कन्स्ट्रक्टर के अंदर उस समारोह को बुलाता है।

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; 
    } 
संबंधित मुद्दे