因此,我将在httpresponse中收到一个JSON阵列。数组由以下对象/变量组成。

{“ sessid”:“ vxkexkmbumbbyesrlvaxrxsrxsaftfhdqd8”,“ session_name”:“ SESS88CDFB2F1C420898”,“用户”:{“ uid”:“ uid”:“ uid”:“ uid”:“ 60”,“”,“ name”:“ abc”:“ abc”,“”,“”,“”,“”,“”,“”,“”:“”“”:“”“”:“”:“”“”:“”:“”“”:“”:“”“”:“”:“”“”:“”:“”“”:“”:“”“”“”:“”:“”“”“”:“”:“”“”“”:“”:“”“”“”:“”“”“”“”“”“”“”“”“”“”“”“”“”: “,“ signature_format”:“ filtered_html”,“创建”:“ 13082976”,“访问”:“ 1386287”,“ login”:1386211,“ status”:“ 1”,“ 1”,“ timezone”,“ timezone”:null,null,“语言”:“:” “”,“图片”:null,“ data”:{“ mimemail_textonly”:0},“角色”:{“ 2”:“ Authenticated用户”,“ 5”:“中心用户”},“ field_centre_reference”:{ “ und”:[{“ nid”:“ 256”}]},“ field_first_name”:{“ und”:[{“ value”:“ web”,“格式”:null,null,“ safe_value”:“ web”} ]},“ field_surname”:{“ und”:[{“ value”:“ services”,“格式”:null,“ safe_value”:“ services”}]},“ bounce_mail_blocked”:false,“ force_pass_change” 0“}}}

现在,我想在单独的变量中接收所有这些对象/字符串。就像我想在变量字符串session_id中存储“ sessid”。等等。我可以在以下代码的帮助下以简单的方式获得前两个(即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的菜鸟,因此我不知道如何将其余数据保存在变量中。即将到来的数据不能以简单的方式保存。

有帮助吗?

解决方案

尝试一下:

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

其他提示

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

到Parser 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"));

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

编辑:例如,您可以看看我以前的一个问题之一 Jacksonparser databind和核心原因“找到了APK的重复文件”?

您应该注意到您收到的JSON是嵌套的JSON。就像地图一样,地图的值之一也是地图。就您而言,有一个jsonobject包含sessid和session_name,而仅是字符串,但是“用户”也是jsonobject,因此您可以按级别对其进行解析。有关更多详细信息,您可以阅读 http://www.vogella.com/articles/androidjson/article.html

尝试这个..

得到

 "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");
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top