2016-03-22 3 views
0

Ich habe ich JSON-Objekt anstelle eines JSON-Array, Ich möchte den Wert und erstellen Sie neue JSON-Objekt und wieder in JSON-Array.Wie kann JSON-Objekt erstellen und JSON-Array von for-Schleife in Android einfügen?

Hier meine JSONObject genannt Antwort

{"data": 
[{ 
    "level":"lv1", 
    "name_indo":"Telinga", 
    "name_eng":"Ear", 
    "detail_indo":"Telinga adalah alat indra yang memiliki fungsi untuk mendengar suara yang ada di sekitar kita.\r\n", 
    "detail_eng":"The ear is the sensory apparatus that has a function to hear the sounds that are around us .\r\n", 
    "image_url":"\/append_img\/telinga.png”}, 
{ 
    “level":"lv1", 
    "name_indo":"Gigi", 
    "name_eng":"Tooth", 
    "detail_indo":"Gigi adalah alat yang digunakan untuk mengolah makanan saat kita makan.\r\n", 
    "detail_eng":"Gigi is a tool used to process food when we eat.\r\n", 
    "image_url":"\/append_img\/gigi.png"}] 
} 

Hier ist mein Code für eine neue JSON nur machen Array mit name_eng Wert und image_url Wert:

    try { 
        JSONArray resultArr = response.getJSONArray("data"); 

        JSONObject filterJson = null; 
        JSONArray filterArr = null; 
        for (int i = 0; i < resultArr.length(); i++) { 
         Log.v(TAG, "run for"); 
         JSONObject finalObj = (JSONObject) resultArr.get(i); 
         String name_eng = finalObj.getString("name-eng"); 
         filterJson = new JSONObject(); 
         filterJson.put("name_eng", name_eng); 

         filterArr = new JSONArray(); 
         filterArr.put(filterJson); 
        } 
        JSONObject fixedJSON = new JSONObject(); 
        assert filterArr != null; 
        fixedJSON.put("data", filterArr.toString()); 
        Log.v(TAG, "filterarray : "+fixedJSON); 
        } catch (JSONException e) { 
        e.printStackTrace(); 
        } 

Das ist mein LogCat Fehler:

03-22 23:50:42.864 10867-10867/tk.partofbodyapp.partofbodyapp E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: tk.partofbodyapp.partofbodyapp, PID: 10867 
                      java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONArray org.json.JSONArray.put(java.lang.Object)' on a null object reference 
                       at tk.partofbodyapp.partofbodyapp.startgameActivity$startJson.onPostExecute(startgameActivity.java:191) 
                       at tk.partofbodyapp.partofbodyapp.startgameActivity$startJson.onPostExecute(startgameActivity.java:88) 
                       at android.os.AsyncTask.finish(AsyncTask.java:636) 
                       at android.os.AsyncTask.access$500(AsyncTask.java:177) 
                       at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:653) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:135) 
                       at android.app.ActivityThread.main(ActivityThread.java:5254) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at java.lang.reflect.Method.invoke(Method.java:372) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 

Der Fehler startgameActivity.java:191 ist filterArr.put(filterJson);

Und ich will ein JSON wieder das machen liegen:

{"data": 
[{ 
    "name_eng":"Ear", 
    "image_url":"\/append_img\/telinga.png”}, 
{ 
    "name_eng":"Tooth", 
    "image_url":"\/append_img\/gigi.png"}] 
} 

Jede Idee?

+0

Ich denke, das Problem ist etwas anderes.Ich versuchte 'JSONObject jsonObject = neues JSONObject (yourJson)' und es warf JsonToken.syntaxError. Nachdem ich eine Weile gegraben habe, habe ich herausgefunden, dass es nicht in der Lage ist, "\\ /" in Ihrem image_url-Feld zu analysieren. Möglicherweise ist das der Grund, warum Sie NullPointerException erhalten. –

+0

Muss! Es ist etwas falsch mit Ihrem JSON. '.... "image_url":" \/append_img \ /telinga.png [“]}, { [„] Ebene ":" lv1" , ' Charaktere in [] sollen Anführungszeichen gesetzt werden (“) aber sind etwas anderes.Wenn Sie sie in Anführungszeichen ändern, werden sie leicht geparst und null Zeiger wird nicht geworfen. –

+0

Ich habe versucht, nur 'name_eng' zu erhalten, aber immer noch das gleiche Problem.Ich denke es ist nicht über Sohn Struktur. – Ariasa

Antwort

1

versuchen diese

try { 
    JSONArray resultArr = response.getJSONArray("data"); 
    JSONArray filterArr = new JSONArray(); 
    for (int i = 0; i < resultArr.length(); i++) { 
     Log.v(TAG, "run for"); 
     JSONObject filterJson = new JSONObject(); 
     JSONObject finalObj = (JSONObject) resultArr.get(i); 
     String name_eng = finalObj.getString("name-eng"); 
     String image_url = finalObj.getString("image_url"); 
     filterJson.put("name_eng", name_eng); 
     filterJson.put("image_url", image_url); 
     filterArr.put(filterJson); 
    } 
    JSONObject fixedJSON = new JSONObject(); 
    assert filterArr != null; 
    fixedJSON.put("data", filterArr); 
    Log.v(TAG, "filterarray : "+fixedJSON); 
} catch (JSONException e) { 
    e.printStackTrace(); 
} 
+0

filterArr.put (filterJson) aways sein nullException – Ariasa

+0

verwenden 'AssertNotNull (filterArr)' anstelle von 'assert filterArr! = null;' und versuchen Sie es erneut. – ELITE

+0

show 'LogCat' .. – ELITE

0

Das Problem ist, dass Sie eine neue JSONArray sind die Schaffung der Schleife jeder passieren. Stellen Sie außerdem sicher, dass Sie alle Informationen erhalten, die Sie für jede Schleifeniteration filtern möchten.

+0

ich hatte das versuchen, aber nicht funktioniert, filterArr.put (filterJson) away sein nullException – Ariasa

+0

Ich bearbeitet einen Autokorrekturfehler ... – RScottCarson

+0

Und wenn Sie sagen, es ist "nicht funktioniert", was nicht funktioniert? – RScottCarson

1

Nun, mach dir keine Sorgen, hier ist eine einfache Möglichkeit, es nur in 5 einfachen Schritten zu tun.

1: Erstellen Sie ein Modell POJO - Enthält nur die Felder, die in Ihrer Ausgabe json benötigt werden.

public class Model2 { 

    String name_eng; 
    String image_url; 

    //Create Getters and Setters 

} 

2: erstellen Json-Objekt aus dem json - Eingang ist Ihr JSON-String

JSONObject jsonObject = new JSONObject(json); 

3: die JSONArray Holen und wandeln es in die Liste der Objekte

Type listType = new TypeToken<ArrayList<Model2>>() { }.getType(); 
List<Model2> outputList = new Gson().fromJson(jsonObject.getJSONArray("data").toString(), listType); 

(Verwendet Gson, um Json zu Object zu konvertieren. Muss auch eine gute Möglichkeit sein, mit JSON-Bibliothek zu tun)

4: Neue JSONObject - die Antwort

JSONObject newJsonObject = new JSONObject(); 

5 senden: fügen Sie den output zu newJsonObject

newJsonObject.put("data", outputList); 

PS: Ihre json nicht serialisierbar ist, bis Sie tun Änderungen habe ich dir im Kommentar gesagt.