2017-02-02 71 views
1

我有这个JSON字符串。无法从jsonObject的Getstring

{ 
    "drtest": { 
     "password":"dr123", 
     "presence": { 
      "lastSeen":1485992132269, 
      "status":"offline" 
     }, 
     "role":"Doctor", 
     "speciality":"Physiotherapist", 
     "token":"f80ve0sY6Ak:APA91bGLPlmy7b_iyqtW9ioG11TOx3xTB9BJgb1vvBK4YRo-28DyXWydg476TvjzaxyNB3kTTMn0BycEDm9UJHAPeoWzV-vFrwN46hg-GKSI6DH1s9zrH8h834c2whEdr12XqWN-4jrs" 
    }, 
    "patient": { 
     "password":"pat123", 
     "presence": { 
      "lastSeen":1486046501150, 
      "status":"online" 
     }, 
     "role":"Patient", 
     "token":"f80ve0sY6Ak:APA91bGLPlmy7b_iyqtW9ioG11TOx3xTB9BJgb1vvBK4YRo-28DyXWydg476TvjzaxyNB3kTTMn0BycEDm9UJHAPeoWzV-vFrwN46hg-GKSI6DH1s9zrH8h834c2whEdr12XqWN-4jrs" 
    } 
} 

首先,我保持医生角色的轨道,但现在我必须跟踪专业。不过,我正在尝试应该工作正确的代码,但它不按预期工作。

正如您所见,只有一个实体具有专业数据,而其他实体不包含专业领域。如何解析专业数据(如果存在)并忽略JSON中是否存在专业领域?

我使用这个代码:

try { 
     contactList.clear(); 
     JSONObject obj = new JSONObject(s); 
     Iterator i = obj.keys(); 
     String key = ""; 

     while (i.hasNext()) { 
      key = i.next().toString(); 
      JSONObject singleUser = (JSONObject) obj.get(key); 
      String role = singleUser.get("role").toString(); 

      JSONObject singleUser2 = (JSONObject) obj.get(key); 

      String tpesu= singleUser2.getString("speciality"); 

      // no success here? need help want this value... 
      Log.e("specialittyyyyyyy",tpesu+""); 

      JSONObject presence = singleUser.getJSONObject("presence"); 
      String status = presence.getString("status"); 

      if (!key.equals(UserDetails.username)) { 
       if (role.equals("Doctor")) { 
        HashMap<String, String> docs = new HashMap<>(); 
        docs.put("name", key); 
        docs.put("status", status); 
        Log.e("status ", status + ""); 
        contactList.add(docs); 
       } 
      } 
      totalUsers++; 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
+0

什么发生jsonexception的logcat的检索 – petey

回答

3

包围单用户因此避免格式或空指针异常

if(singleUser2.has("speciality")) { 
    tpesu = singleUser2.getString("speciality"); 
} 

全局声明字符串tpesu。

1

您可以使用“has”功能。即,如果(singleUser2.has(“专业”))...

0

singleUser & singleUser2 JSON对象是相同的(drtest),因为你是由同一key值引用它们获取它们。反而让singleUser2由下一个可用的密钥(singleUser2key=...在下面的示例)

JSONObject obj = new JSONObject("dd"); 
Iterator i = obj.keys(); 
String key = ""; 
while (i.hasNext()) { 
    key = i.next().toString(); 
    String singleUser2key = i.next().toString(); 

    JSONObject singleUser = (JSONObject) obj.get(key); 
    String role = singleUser.get("role").toString(); 

    JSONObject singleUser2 = (JSONObject) obj.get(singleUser2key); 

    String tpesu= singleUser2.getString("speciality"); 
    // no success here ??? need help want this value... 
    Log.e("specialittyyyyyyy",tpesu+"");