接收json数组并保存变量。 Android的

时间:2013-12-03 14:39:27

标签: android json httpresponse

所以我在httpresponse中收到一个JSON数组。该数组由以下对象/变量组成。

  

{ “sessid”: “vxkEXkMBUmBByESRlvaxrxSaFTfhDqd8”, “会话名称”: “SESS88cdfb2f1c420898”, “用户”:{ “UID”: “60”, “姓名”: “ABC”, “主题”: “”,“签名“:” “ ”signature_format“: ”filtered_html“, ”创造“: ”13082976“, ”访问“: ”1386287“, ”登录“:1386211, ”状态“: ”1“, ”时区“:空” language“:”“,”picture“:null,”data“:{”mimemail_textonly“:0},”roles“:{”2“:”authenticated user“,”5“:”center user“},”field_centre_reference “:{” UND “:[{” NID “:” 256 “}]},” field_first_name “:{” UND “:[{” 值 “:” 网络 “ ”格式“:NULL, ”safe_value“:”网络 “}]},” field_surname “:{” UND “:[{” 值 “:” 服务 “ ”格式“:空, ”safe_value“: ”服务“}]}, ”bounce_mail_blocked“:假的,” force_password_change “:” 0" }}

现在我想在单独的变量中接收所有这些对象/字符串。就像我想将“sessid”存储在变量String session_id中。等等。我可以借助以下代码以简单的方式获得前两个(即sessid和session_name)。

response = client.execute(httppost);

BasicResponseHandler handler = new BasicResponseHandler();
String data = handler.handleResponse(response);
jObj = new JSONObject(data);

sessid = jObj.getString("sessid");
Log.d("sessid obj", sessid);
session_name = jObj.getString("session_name");
Log.d("session_name", session_name);

但由于我是Android的菜鸟,我不知道如何将其余数据保存在变量中。即将推出的数据无法以简单的方式保存。

5 个答案:

答案 0 :(得分:3)

试试这个:

 JSONObject j_user = jObj.getJSONObject("user");
 String uid = j_user.getString("uid");
 ...
 //And so on with the rest of the fields

答案 1 :(得分:3)

{ // json object node 
    "sessid": "vxkEXkMBUmBByESRlvaxrxSaFTfhDqd8",
    "session_name": "SESS88cdfb2f1c420898",
    "user": { // json object user 
        "uid": "60", // string 
        "name": "abc",
        "theme": "",
        "signature": "",
        "signature_format": "filtered_html",
        "created": "13082976",
        "access": "1386287",
        "login": 1386211,
        "status": "1",
        "timezone": null,
        "language": "",
        "picture": null,
        "data": { // json object data
            "mimemail_textonly": 0 //string
        },
        ....// rest of the json

{表示json对象节点

[表示json数组节点

解析

 JSONObject jObj = new JSONObject(load());
 String sessid = jObj.getString("sessid");
 Log.d("sessid obj", sessid);
 JSONObject user = jObj.getJSONObject("user");
 String uid = user.getString("uid"); 
 Log.d("sessid obj", uid);

解析数据

 "data": {
        "mimemail_textonly": 0
    },


   JSONObject data= user.getJSONObject("data");
   Log.i(".......",""+data.getString("mimemail_textonly"));

解析器field_centre_reference

 "field_centre_reference": { // json object field_centre_reference
            "und": [  // json array und
                {        // json  object node 
                    "nid": "256" //string
                }
            ]
        },

  JSONObject field= user.getJSONObject("field_centre_reference");
  JSONArray jr = field.getJSONArray("und");
  JSONObject jb1 = (JSONObject) jr.get(0);
  Log.i(".......",""+jb1.getString("nid"));

答案 2 :(得分:1)

查看JacksonParser库,它提供的注释使您的工作变得如此简单。它是最快的解析库之一......你可以拥有它here

修改 作为示例,您可以查看我之前的问题JacksonParser databind and core cause "Found duplicate file for APK"?

答案 3 :(得分:0)

试试这个..

获取

 "user": {
        "uid": "60",

JSONObject obj_user = jObj.getJSONObject("user");
String uid = obj_user.getString("uid");

 "user": {
            "uid": "60",
"data": {
            "mimemail_textonly": 0
        }

JSONObject obj_data = jObj.getJSONObject("data");
String mimemail_textonly = obj_user.getString("mimemail_textonly");
JSONObject obj_roles = jObj.getJSONObject("roles");
String two = obj_roles.getString("2");

"field_centre_reference": {
            "und": [
                {
                    "nid": "256"           

JSONObject obj_field_centre_reference = jObj.getJSONObject("field_centre_reference");
JSONArray ary_und = obj_field_centre_reference.getJSONArray("und");
JSONObject objve = ary_und.getJSONObject(0);
String nid= objve.getString("nid");

答案 4 :(得分:0)

您应该注意到您收到的JSON是嵌套的JSON。就像Map一样,Map的值之一也是Map。 在您的情况下,有一个JSONObject包含sessid和session_name虽然只是字符串,但“user”也是一个JSONObject,因此您可以逐级解析它。 有关详细信息,请参阅http://www.vogella.com/articles/AndroidJSON/article.html