2017-10-29 7 views
-2

私が持っている以下のJSON文字列の中から配列を取得:JSONArray

{ 
    "error":false, 
    "message":"modules retrieved successfully", 
    "subjectsEnrolled": 
    { 
     "studentNumber":"PT2014-1282", 
     "courseId":1, 
     "moduleNames":["Internet Programming and E-commerce","Operating Systems","Java and Distributed Systems"] 
    } 
} 

を、私はmoduleNamesで値を取得したいと思います。

試してみて、値を取得する現在の方法は次のとおりです。

@Override 
protected void onPostExecute(String s) { 

    super.onPostExecute(s); 

    try { 

     JSONObject object = new JSONObject(s); 
     JSONArray array = object.getJSONArray("moduleNames"); 

     if (!object.getBoolean("error")) { 
      Toast.makeText(getActivity(), object.getString("message"), Toast.LENGTH_SHORT).show(); 

     } else { 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
     Log.e("JSON Parser", "Error parsing data " + e.toString()); 
    } 
} 

は次のトレースに続く:

10-29 20:48:50.741 14484-14484/com.example.vhuhwavho.mylms W/System.err: org.json.JSONException: No value for moduleNames 
10-29 20:48:50.741 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at org.json.JSONObject.get(JSONObject.java:355) 
10-29 20:48:50.741 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at org.json.JSONObject.getJSONArray(JSONObject.java:549) 
10-29 20:48:50.741 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at com.example.vhuhwavho.mylms.ModulesFragment$PerformNetworkRequest.onPostExecute(ModulesFragment.java:166) 
10-29 20:48:50.741 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at com.example.vhuhwavho.mylms.ModulesFragment$PerformNetworkRequest.onPostExecute(ModulesFragment.java:137) 
10-29 20:48:50.741 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at android.os.AsyncTask.finish(AsyncTask.java:632) 
10-29 20:48:50.741 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at android.os.AsyncTask.access$600(AsyncTask.java:177) 
10-29 20:48:50.741 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
10-29 20:48:50.741 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
10-29 20:48:50.741 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at android.os.Looper.loop(Looper.java:146) 
10-29 20:48:50.741 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5487) 
10-29 20:48:50.741 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at java.lang.reflect.Method.invokeNative(Native Method) 
10-29 20:48:50.741 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at java.lang.reflect.Method.invoke(Method.java:515) 
10-29 20:48:50.746 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
10-29 20:48:50.746 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
10-29 20:48:50.746 14484-14484/com.example.vhuhwavho.mylms W/System.err:  at dalvik.system.NativeStart.main(Native Method) 
10-29 20:48:50.746 14484-14484/com.example.vhuhwavho.mylms E/JSON Parser: Error parsing data org.json.JSONException: No value for moduleNames 

何かアドバイスを?

JSONObject root_object = new JSONObject(s); 
    JSONObject object = root_object.getJSONObject("subjectsEnrolled"); 
    JSONArray array = object.getJSONArray("moduleNames"); 

答えて

2

JsonArrayはそうあなたがは、次のように、あなたの配列を取る、その後をsubjectEnrolledされる第一内のオブジェクトを取得する必要があり、内側JsonObjectでありますこれをチェックしてください。上記のように、内側のオブジェクトを最初に取得しなければなりません。 これに似た手順を各v配列内のalues。

for(JsonValue value : arrObj){ 
     System.out.println(value.toString()); 
    } 

http://www.java2novice.com/java-json/javax.json/read-json-array/

+0

私はあなたがコーディングハッピーあなたの問題を解決し@Yeezus **!**嬉しいです。 – Xenolion

0

この

JSONObject object = new JSONOBject(s); 
    String error = object.getString("error"); 
    String message = object.getString("message"); 

    JSONObject obj2 = object.getJSONObject("subjectsEnrolled"); 
    String studentnumber = obj2.getString("studentNumber"); 
    String courseid = obj2.getString("courseId"); 


    JSONArray jarr1 = obj2.getJSONArray("moduleNames"); 
    Log.d("checkjsonarrayresponsehere==", ""+jarr1); 
0

をお試しください: