Отставление массива JSON и сохранения в переменных. Android

StackOverflow https://stackoverflow.com/questions/20354088

  •  25-08-2022
  •  | 
  •  

Вопрос

Так что я получаю массив JSON в httpresponse. Массив состоит из следующих объектов/переменных.

{"sessid": "vxkexkmbumbbyesrlvaxrxsaftfhdqd8", "session_name": "sess88cdfb2f1c420898", "Пользователь": {"uid": «60», «Имя»: «ABC», «тема "," signature_format ":" filtered_html "," Создан ":" 13082976 "," Access ":" 1386287 "," Login ": 1386211," Статус ":" 1 "," Timezone ": null," Язык "::" "," Picture ": null," data ": {" mimemail_textonly ": 0}," Роли ": {" 2 ":" Аутитированный пользователь "," 5 ":" Центр Пользователь "}," Field_Centre_Reference ": { «Und»: [{"nid": "256"}]}, "field_first_name": {"und": [{"value": "web", "format": null, "safe_value": "web"} ]}, "field_surname": {"und": [{"value": "services", "format": null, "safe_value": "services"}]}, "bounce_mail_blocked": false "force_password_change": " 0 "}}

Теперь я хочу получить все эти объекты/строки в отдельных переменных. Как я хочу сохранить «sessid» в переменной строке 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, я не знаю, как сохранить остальные данные сохранены в переменных. Предстоящие данные не могут быть сохранены простым способом.

Это было полезно?

Решение

Попробуйте с этим:

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

Для анализации 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