Android - 从JSON对象获取值

时间:2017-10-10 01:03:35

标签: android json

我有这个json

{
    "results": [
        {
            "user": {
                "gender": "male",
                "name": {
                    "title": "mr",
                    "first": "herbert",
                    "last": "davidson"
                },
                "location": {
                    "street": "9763 fincher rd",
                    "city": "melbourne",
                    "state": "new south wales",
                    "zip": 26278
                },
                "email": "herbert.davidson@example.com",
                "username": "lazyelephant581",
                "password": "abgrtyu",
                "salt": "O8ZbSsUL",
                "md5": "7575bd959be09bc6d510a6a91750ce40",
                "sha1": "0db99de8402e1defbd7935dbd602d99329698d4d",
                "sha256": "c283d262115f90b729bb555db3dbecc8d27eebed513d7f01da799dec9e9d3269",
                "registered": 1275070071,
                "dob": 122409280,
                "phone": "05-5742-3228",
                "cell": "0481-652-548",
                "TFN": "973720989",
                "picture": {
                    "large": "https://randomuser.me/api/portraits/men/24.jpg",
                    "medium": "https://randomuser.me/api/portraits/med/men/24.jpg",
                    "thumbnail": "https://randomuser.me/api/portraits/thumb/men/24.jpg"
                }
            }
        }
    ],
    "nationality": "AU",
    "seed": "0a69317ece7072e000",
    "version": "0.7"
}

并且我这样做:(结果是从服务返回的json)

try{
    JSONObject jsonResponse = new JSONObject(result);
    JSONObject jo = jsonResponse.getJSONObject("user");
    String nome = jo.getString("username"); 
}catch(Exception e) {
    e.printStackTrace();
}

但是给了我这个错误

org.json.JSONException:没有用户名

的值

我做错了什么?我尝试做一个JSONArray,尝试从另一个jsonobject获取jsonobject,但是给出了一个错误,它无法将jsonobject转换为jsonarray。

问候!

圣拉斐尔

2 个答案:

答案 0 :(得分:3)

在您的代码中尝试此操作。

try {
        JSONObject jsonObject = new JSONObject(response);
        JSONArray results = jsonObject.getJSONArray("results");
        for (int i = 0; i < results.length(); i++) {
            JSONObject jo = results.getJSONObject(i);
            JSONObject user = jo.getJSONObject("user");
            String username = user.optString("username");
        }
} catch (JSONException e) {
        e.printStackTrace();
}

在代码中使用optString。如果username为空,则不会返回错误。

答案 1 :(得分:1)

词典中的第一级键是&#34;结果&#34;而不是&#34;用户&#34;。此外,结果是一个数组,所以你必须索引它。

您尝试访问:user-&gt; username

您需要访问:results [0] - &gt; user-&gt; username