如何用多个对象解析这个 json

How to parse this json with multiple objects

devs 我被困在解析这种 JSON 我不明白如何获得状态和消息的价值任何帮助将是非常可观的。我得到了 error 的值,但是当我想访问 status 和 message 的值时,它抛出了一个错误 JSON格式:

{
    "error": {
        "status": 400,
        "message": "Wrong number of segments"
    }
}

我的解析代码 json :

  try {
                    JSONObject jso = new JSONObject(String.valueOf(response));

                    //jso.getJSONObject("error").getJSONObject("message");
                   jso.getJSONObject("error");
                   jso.getJSONObject("status").toString(200);
                    Log.d(TAG,"jso1"+jso);
                } catch (JSONException e) {
                    e.printStackTrace();
                }

try {
                JSONObject jso = new JSONObject(String.valueOf(response));

                //jso.getJSONObject("error").getString("message");
               jso.getJSONObject("error");
               jso.getJSONObject("error").getInt("status"); // if it was string use getString or it was int than use value getInt
                Log.d(TAG,"jso1"+jso);
            } catch (JSONException e) {
                e.printStackTrace();
            }

试试这个

try {
                    JSONObject fullResponse = new SONObject(String.valueOf(response));
                    JSONObject errorData = fullResponse.getJSONObject("error");
                    String errorCode = errorData.getObject("status");
                    String errorMessage = errorData.getString("message");                  
                    Log.d(TAG,"Result = "+errorCode +" - "+errorMessage );
                } catch (JSONException e) {
                    e.printStackTrace();
                }
JSONParser parser = new JSONParser();
JSONObject jso = (JSONObject) parser.parse(String.valueOf(response));

上面的命令会给你 JSON.

的响应

要获取状态和消息,您需要将错误提取为单独的 JSON对象,然后解析状态和消息

JSONObject errorObj = (JSONObject) jso.get("error");
String message = errorObj.get("message").toString();
int status = Integer.parseInt(errorObj.get("status").toString());

请记住使用层次结构进行解析和检索。因此,如果状态和消息在“错误”中,则将错误提取为 JSON 对象,然后检索子键。作为一个好习惯,检查密钥是否存在:-

if(errorObj.has("")) {
// do something
}

添加工作示例 :-

import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser; 
private static void parseJsonTest() {
            String json = "{\n" +
                    "    \"error\": {\n" +
                    "        \"status\": 400,\n" +
                    "        \"message\": \"Wrong number of segments\"\n" +
                    "    }\n" +
                    "}";
            try {
                JSONParser parser = new JSONParser();
    
                JSONObject jso = (JSONObject) parser.parse(json);
    
                JSONObject errorObj = (JSONObject) jso.get("error");
                String message = errorObj.get("message").toString();
                int status = Integer.parseInt(errorObj.get("status").toString());
    
                System.out.println(message + " >>>>>>> " + status);
            } catch (Exception e) {
    
            }
        }

输出:-

Wrong number of segments >>>>>>> 400

将 Json 转换为 java 的最佳方法是使用 Gson 等转换器库 检查下面的 link :

https://github.com/google/gson