2017-09-28 80 views
1

试图分析这种类型的JSON格式的Java中解析2D的Json在Java

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

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

    } 
] 
} 

我得到这种类型的JSON格式的,现在我想要做的是首先检查是否output.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) { 
} 

回答

0
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()解析整数的字符串表示形式。 “输出”字符串不代表整数。

0

响应是一个JSONObject,而不是JSONArray(它包含在大括号中)。该阵列是名为的结果。 因此改变myJson到的JSONObject和检查成功后场, 创建一个新的变量

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

和遍历这个代替myJson的。你也不应该抛弃异常,因为堆栈跟踪可以提供有关问题的一些提示。您可以在catch块中添加

e.printStackTrace();