java - 如何在 Android 中从 JSON 数组获取任意字符串

标签 java android arrays json android-volley

我的服务器正在向我发送以下格式的 JSON 数据:

{  
   "sub":"system",
   "created":1525944295496,
   "exp":1526001295,
   "user":{  
      "userId":"5af2e4f4dae7bb353ac9d9d2",
      "userFirstName":"Sastra",
      "userMiddleName":"Test",
      "userLastName":"Creations",
      "userAccountType":null,
      "userOrganizationName":null,
      "userEmail":"sastratestmail@gmail.com",
      "userPhone":"9841987654",
      "username":"system",
      "userGender":"male",
      "userAddress":null,
      "userPassword":null,
      "userRole":null,
      "userStatus":null,
      "userCreatedBy":null,
      "userDateCreated":null,
      "userDateLong":null,
      "userModifiedBy":null,
      "userDateModified":null,
      "userIsDisabled":null,
      "userTrackers":null,
      "userFeatures":null,
      "userCode":null,
      "token":null
   }
}

我正在使用以下实现,但它不起作用我可以从上面获取 sub、created、exp 数据,但不能从“user”数组中获取内部数据。我尝试使用

public void onResponse(String response) {
                try {
                    jsonObject = new JSONObject(response);


                } catch (JSONException e) {
                    e.printStackTrace();
                }
                String token = null;
                try {
                    token = jsonObject.getString("result");
                    String decoded = DecodeToken.decoded(token);
                    JSONObject obj = new JSONObject(decoded);
                    String userId = obj.getString("sub");



                    Log.d("MyLogs", "" + decoded);
                    Log.d("MyLogs", "" + obj);

//                    Log.d("MyLogs", "" + sub);
                    Log.d("MyLogs", "" + userId);
// The following implementation is throwing error like
// {Above Json data} of type org.json.JSONObject cannot be converted to JSONArray

                    JSONArray jsonArray = new JSONArray(decoded);

// This gets you the first (zero indexed) element of the above array.
                    JSONObject jsonObject = jsonArray.getJSONObject(0);
                    String userId = jsonObject.getString("userId");
                    Log.d("GMap",""+userId);


                } catch (JSONException e) {
                    e.printStackTrace();
                } catch (Exception e) {
                    e.printStackTrace();
                }

我需要做的是从“用户”数组中获取数据。我怎样才能做到这一点。 ??

Logcat 数据:

05-10 15:21:24.752 21709-21709/com.queendevelopers.apple.androidwebsocketexample D/MyLogs: {"sub":"system","created":1525944986850,"exp":1526001986,"user":{"userId":"5af2e4f4dae7bb353ac9d9d2","userFirstName":"Sastra","userMiddleName":"Test","userLastName":"Creations","userAccountType":null,"userOrganizationName":null,"userEmail":"sastratestmail@gmail.com","userPhone":"9841987654","username":"system","userGender":"male","userAddress":null,"userPassword":null,"userRole":null,"userStatus":null,"userCreatedBy":null,"userDateCreated":null,"userDateLong":null,"userModifiedBy":null,"userDateModified":null,"userIsDisabled":null,"userTrackers":null,"userFeatures":null,"userCode":null,"token":null}}
    {"sub":"system","created":1525944986850,"exp":1526001986,"user":{"userId":"5af2e4f4dae7bb353ac9d9d2","userFirstName":"Sastra","userMiddleName":"Test","userLastName":"Creations","userAccountType":null,"userOrganizationName":null,"userEmail":"sastratestmail@gmail.com","userPhone":"9841987654","username":"system","userGender":"male","userAddress":null,"userPassword":null,"userRole":null,"userStatus":null,"userCreatedBy":null,"userDateCreated":null,"userDateLong":null,"userModifiedBy":null,"userDateModified":null,"userIsDisabled":null,"userTrackers":null,"userFeatures":null,"userCode":null,"token":null}}
    system
05-10 15:21:24.754 21709-21709/com.queendevelopers.apple.androidwebsocketexample W/System.err: org.json.JSONException: Value {"sub":"system","created":1525944986850,"exp":1526001986,"user":{"userId":"5af2e4f4dae7bb353ac9d9d2","userFirstName":"Sastra","userMiddleName":"Test","userLastName":"Creations","userAccountType":null,"userOrganizationName":null,"userEmail":"sastratestmail@gmail.com","userPhone":"9841987654","username":"system","userGender":"male","userAddress":null,"userPassword":null,"userRole":null,"userStatus":null,"userCreatedBy":null,"userDateCreated":null,"userDateLong":null,"userModifiedBy":null,"userDateModified":null,"userIsDisabled":null,"userTrackers":null,"userFeatures":null,"userCode":null,"token":null}} of type org.json.JSONObject cannot be converted to JSONArray
05-10 15:21:24.756 21709-21709/com.queendevelopers.apple.androidwebsocketexample W/System.err:     at org.json.JSON.typeMismatch(JSON.java:111)
        at org.json.JSONArray.<init>(JSONArray.java:96)
        at org.json.JSONArray.<init>(JSONArray.java:108)
        at com.queendevelopers.apple.androidwebsocketexample.VolleyAuthentication$1.onResponse(VolleyAuthentication.java:82)
        at com.queendevelopers.apple.androidwebsocketexample.VolleyAuthentication$1.onResponse(VolleyAuthentication.java:56)
        at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:67)
        at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30)
05-10 15:21:24.757 21709-21709/com.queendevelopers.apple.androidwebsocketexample W/System.err:     at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:211)
        at android.app.ActivityThread.main(ActivityThread.java:5371)
        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:945)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:740)
05-10 15:21:24.843 21709-21709/com.queendevelopers.apple.androidwebsocketexample I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@394203db time:185869367

最佳答案

org.json.JSONException: Value

JSONException抛出该异常表示 JSON API 存在问题。

JSONArray jsonArray = new JSONArray(decoded);
JSONObject jsonObject = jsonArray.getJSONObject(0);

问题来自 getJSONObject(0);JSONArray 。您应该添加 getJSONObject("user")

JSONObject jsonDATA= response.getJSONObject("user");

关于java - 如何在 Android 中从 JSON 数组获取任意字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50269889/

相关文章:

java - 使用 tomcat 我可以检查我的 HTTP REQUEST 是否是对我的 Web 服务的有效请求?

2 个哈希的 Java 哈希

android - SystemClock() 在 'android.os.SystemClock' 中不公开

java - 在java中用单独的矩形渲染等轴测图

java - 错误更改系统找不到指定的文件

java - InputSource 和 InputStream 有什么区别?

arrays - Swift:从 JSON 编码的数据中获取数组

java - ArrayException越界

java - 我需要某种适用于 Android 的刚体碰撞检测引擎

java - 通过tag停止WorkManager并检查是否运行有问题