Pregunta

Así que estoy recibiendo una matriz JSON en una respuesta htt. La matriz consta de los siguientes objetos/variables.

{"sessid": "vxkExkmbumbyesrlvaxrxsaftfhdqd8", "session_name": "sess88cdfb2f1c420898", "usuario": {"uid": "60", "nombre": "ABC", "Tema": "," Firma ":": ":": ":": " "," firma_format ":" Filtered_html "," creado ":" 13082976 "," Acceso ":" 1386287 "," Iniciar sesión ": 1386211," Estado ":" 1 "," Timelone ": Null," Idioma ": "", "Imagen": Null, "Datos": {"Mimemail_textonly": 0}, "Roles": {"2": "Usuario autenticado", "5": "Usuario central"}, "Field_centre_reference": {{ "und": [{"nid": "256"}]}, "field_first_name": {"und": [{"valor": "web", "formato": null, "safe_value:" web "} ]}, "field_surname": {"und": [{"valor": "servicios", "formato": null, "safe_value": "servicios"}]}, "bounce_mail_blocked": false, "force_password_change": ":" 0 "}}

Ahora quiero recibir todos estos objetos/cadenas en variables separadas. Como si quisiera almacenar el "sessid" en una variable cadena session_id. Y así. Puedo obtener los dos primeros (es decir, sessid y session_name) de una manera simple con la ayuda del siguiente código.

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);

Pero como soy un novato en Android, no sé cómo obtener el resto de los datos que se guarden en variables. Los próximos datos no se pueden guardar de una manera simple.

¿Fue útil?

Solución

Intenta con esto:

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

Otros consejos

{ // 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

{ representa el nodo de objeto JSON

[ representa el nodo de matriz JSON

Analizar

 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);

Para analizar los datos

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


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

Para analizar campo_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"));

Echa un vistazo a la biblioteca JacksonParser, proporciona anotaciones que hacen que tu trabajo sea tan fácil. Y es una de las bibliotecas de análisis más rápidas ... puedes tenerlo aquí

Editar:Como ejemplo, puedes echar un vistazo a una de mis preguntas anteriores JacksonParser Databind y Core Cause "encontrado archivo duplicado para APK"?

Debe notar que el JSON que recibió es un JSON anidado. Es como un mapa que uno del valor del mapa también es un mapa. En su caso, hay un JSONObject contiene sessid y session_name, mientras que solo es cadena, pero el "usuario" también es un JSONObject, por lo que puede analizarlo por nivel. Para más detalles, puede leer http://www.vogella.com/articles/androidjson/article.html

Prueba esto..

Consiguiendo

 "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");
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top