有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓在java中解析2d Json

正在尝试用java解析这种类型的json格式

{
"output": "success",
"result": [
    {
        "id": 1,
        "label": "name",

    },
    {
        "id": 2,
        "label": "name_2",

    }
]
}

我得到了这种类型的json格式,现在我要做的是首先检查ifoutput.equalsIgnoreCase("success)"如果为true,然后解析结果的第二个数组。 这是我迄今为止尝试过的

try {
  JSONArray myJson = new JSONArray(response);
  String status = myJson.getString(Integer.parseInt("output"));
  if(status.equalsIgnoreCase("success")) {
    for (int i = 0; i < myJson.length(); i++) {
      JSONObject obj = myJson.getJSONObject(i);
      name.add(obj.getString("label"));
    }
    Log.e("list" , name.toString());
  }
} catch (Exception e) {
}

共 (2) 个答案

  1. # 1 楼答案

    响应是一个JSONObject,而不是JSONArray(它被括在花括号中)。数组是名为result的字段。 因此,将myJson更改为JSONObject,并在检查success字段后, 创建一个新变量

     JSONArray resultArray = myJson.getArray("result");
    

    并对其进行迭代,而不是myJson。此外,您不应该放弃该异常,因为stacktrace可以提供有关问题的一些提示。你可以加上

    e.printStackTrace();
    

    在抓块里

  2. # 2 楼答案

        String responceStr = ...; // here is your full responce string
        try {
            JSONObject responce = new JSONObject(responceStr);
            String status = responce.getString("output");
            if ("success".equalsIgnoreCase(status)) {
                JSONArray result = responce.getJSONArray("result");
                for (int i=0; i < result.length(); i++){
                    JSONObject jsonPair = result.getJSONObject(i);
                    int id = jsonPair.getInt("id");
                    String label = jsonPair.getString("label");
                }
            }
        } catch (JSONException e){
    
        }
    

    Integer.parseInt("123")可以

    Integer.parseInt("output")不正常

    因为Integer.parseInt()解析整数的字符串表示形式。“输出”字符串不表示整数