java - 无法从 jsonObject 获取字符串

标签 java android json

我有这个 JSON 字符串。

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

最佳答案

这样包含 singleUser 以避免格式或空指针异常

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

全局声明字符串 tpesu。

关于java - 无法从 jsonObject 获取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42008109/

相关文章:

java - 为什么使用框架创建模拟对象而不是创建对象本身

java - 用于从 CN 获取 SamAccountName 的 LDAP 子查询

java.util.timer定时器空指针异常

android - 将android中的对象打包以从一个 Activity 转移到另一个 Activity

javascript - jquery ajax如何将整数作为变量发送到php

java - 复杂决策系统的正确设计模式是什么

android - 使用 Android SDK 创建输入表单的示例/教程

android - 为什么我们需要像 "MaaS360 MDM for Samsung"这样的供应商特定的 android 应用程序?

android - 通过JSON向服务器发送数据

php - 使用 json 发送对象