استلام صفيف JSON والتوفير في المتغيرات. ذكري المظهر

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

  •  25-08-2022
  •  | 
  •  

سؤال

لذلك أنا أتلقى مجموعة JSON في httpresponse. يتكون الصفيف من الكائنات/المتغيرات التالية.

{"sessid": "،" signature_format ":" filtered_html "،" تم إنشاؤها ":" 13082976 "،" Access ":" 1386287 "،" login ": 1386211 ،" status ":" 1 "،" timezone ":" null " "" ، "picture": null ، "data": {"mimemail_textonly": 0} ، "ROLES": {"2": "usericated user" ، "5": "center user"} ، "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 "}]} ، 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);

ولكن بما أنني noob في 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 ، فهي توفر التعليقات التوضيحية التي تجعل عملك سهلاً. وهي واحدة من أسرع مكتبات التحليل ... يمكنك الحصول عليها هنا

يحرر:على سبيل المثال ، يمكنك إلقاء نظرة على أحد سؤالي السابق Databind Jacksonparser و Core Cause "Found Found Duplicate File لـ 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