【问题标题】:How to parse this json with multiple objects如何用多个对象解析这个 json
【发布时间】:2020-11-30 12:04:48
【问题描述】:

devs 我被困在解析这种 JSON 我不明白如何获得状态和消息的价值任何帮助将是非常可观的。我得到了错误的值,但是当我想访问状态和消息的值时,它会抛出一个错误 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();
                }

【问题讨论】:

标签: java android json android-volley


【解决方案1】:
JSONParser parser = new JSONParser();
JSONObject jso = (JSONObject) parser.parse(String.valueOf(response));

上面的命令会给你一个 JSON 格式的响应。

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

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

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

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

【讨论】:

  • 好的,这很有帮助,但是当我想访问错误的值时,它会给出一个错误,无法将字符串转换为 jsonobject
  • Areu 使用 JSON(org.json.simple.JSONObject) 或 GS​​ON
【解决方案2】:
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();
            }

【讨论】:

    【解决方案3】:

    试试这个

    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();
                    }
    

    【讨论】:

      【解决方案4】:

      将 Json 转换为 java 的最佳方法是使用转换器库,例如 Gson 检查下面的链接:

      https://github.com/google/gson

      【讨论】:

        猜你喜欢
        • 2016-01-28
        • 1970-01-01
        • 1970-01-01
        • 2019-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多