1

我在解析 JSON 代码时遇到问题。我正在使用 Android 上的 Facebook SDK。看过很多教程,但对我没有帮助。

{
  "id": "1000004577",
  "friends": {
   "data": [
  {
    "id": "11343",
    "statuses": {
      "data": [
        {
          "from": {
            "name": "Maria",
            "id": "1134"
          },
          "message": "...How wonderfull life ",
          "updated_time": "2011-07-05T21:42:29+0000",
          "id": "18665783"
        },
        {
          "from": {
            "name": "Maria ",
            "id": "113931"
          },
          "message": "Ab Montag geht es wieder um 8 Uhr los!\nWir werden jetzt ein Woche vom Herrn Vollrerrichtetitet die N wie möglich!!!\n\nIm auftrag von:\n\n Herrn Siebert",
          "updated_time": "2010-10-01T18:05:59+0000",
          "id": "158583"
        },
        {
          "from": {
            "name": "Maria",
            "id": "11343"
          },
          "message": "Esmu majas...!!! viss ir labi!!!",
          "updated_time": "2010-07-16T08:04:36+0000",
          "id": "137470438"
        },
        {
          "from": {
            "name": "Maria ",
            "id": "113421"
          },
          "message": "I miss kitkat ice-cream!:(",
          "updated_time": "2010-06-06T16:46:13+0000",
          "id": "10231545"
        },
        {
          "from": {
            "name": "Maria",
            "id": "113121"
          },
          "message": "its snowin..xD or it looks like!!!!",
          "updated_time": "2010-06-02T12:57:39+0000",
          "id": "12623356466"
        }
      ],
      "paging": {
        "previous": "https://graph.facebook.com/1134393121/statuses?limit=5&fields=from,message,updated_time&since=1309902149&__paging_token=1866653502783",
        "next": "https://graph.facebook.com/1134393121/statuses?limit=5&fields=from,message,updated_time&until=1275483459&__paging_token=126233544066466"
      }
    }
  },
  {
    "id": "1179089",
    "statuses": {
      "data": [
        {
          "from": {
            "name": "Kristine Vaidere",
            "id": "123089"
          },
          "message": "Запомни! Если ты отключаешь мозги, то ты обязательно должна включить телефон. Что-то из этого должно работать всегда. :D",
          "updated_time": "2013-07-31T08:43:12+0000",
          "id": "1020030233771"
        },
        {
          "from": {
            "name": "Kristine",
            "id": "1179239"
          },
          "message": "bija ideāls! Paldies Prāta vētrai un maniem mīļ",
          "updated_time": "2013-06-09T15:20:50+0000",
          "id": "10200519756813"
        },
        {
          "from": {
            "name": "Kristine ",
            "id": "1179089"
          },
          "message": "Mīļie, takā es pazaudēju savu telefonu :( , man nomainijās nr. Lūdzu sūtiet man savējos un esējo :*",
          "updated_time": "2013-05-07T19:50:00+0000",
          "id": "121433892"
        },
        {
          "from": {
            "name": "Kristine",
            "id": "1179589"
          },
          "message": "nepacietīgs pūlis\n brēc, un rokām plātās baigi.\n jo katrs jau zin kā labāk vaj’g",
          "updated_time": "2013-02-01T14:40:26+0000",
          "id": "463167214"
        },
        {
          "from": {
            "name": "Kristine",
            "id": "11523089"
          },
          "message": "Manas jūtas pret dažiem cilvēkiem nav iespējams izteikt vārdos.. Tās var izteikt tikai ar lāpstu, cirvi vai kaut ko tamlīdzīgu... :D",
          "updated_time": "2013-01-17T21:31:59+0000",
          "id": "454819157"
        }
      ],
      "paging": {
        "previous": "https://graph.facebook.com/1179523089/statuses?limit=5&fields=from,message,updated_time&since=1375260192&__paging_token=10200845330233771",
        "next": "https://graph.facebook.com/1179523089/statuses?limit=5&fields=from,message,updated_time&until=1358458319&__paging_token=4548195341157"
      }
    }
  }
],
"paging": {
  "next": "https://graph.facebook.com/100000425773779/friends?limit=2&fields=statuses.limit(5).fields(from,message,updated_time)&offset=2&__after_id=1179523089"
}
}
}

我需要得到这些值:

             "from": {
                 "name": "Maria ",
                 "id": "113421"
              },
                 "message": "I miss kitkat ice-cream!:(",
                 "updated_time": "2010-06-06T16:46:13+0000",
                 "id": "10231545"

然后将它们存储在哈希图中......如果有人能帮助解决这个问题,那就太好了。这是无法正常工作的代码片段。

package com.androidhive.jsonparsing;

 import java.util.ArrayList;
 import java.util.HashMap;

 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;

 import com.androidhive.jsonparsing.R;
 import com.androidhive.jsonparsing.R.id;
  import com.androidhive.jsonparsing.R.layout;

 import android.app.ListActivity;
 import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
 import android.view.View;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemClickListener;
 import android.widget.ListAdapter;
 import android.widget.ListView;
 import android.widget.SimpleAdapter;
 import android.widget.TextView;

 public class AndroidJSONParsingActivity extends ListActivity {




// url to make request
private static String url = "https://graph.facebook.com/100000425773779?fields=friends.limit(1).fields(statuses.limit(5).fields(from,message,updated_time))?access_token=CAACEdEose0cBAJvWFqIXsQXvJvN7mZBHDn6g3ocW4HvfKZCl8JfSkeDvdQNVnVO0UyM297pcM1SlecH613j4NT1KZBCZAAG7L4hTMY7yhZCQRLwhYzHCM6zZAi3ZCwA48JXoJH31QInRO5hjWTyTFEHVL8ao7CRJVc4OLZAooqTQlgZDZD";

// JSON Node names
private static final String TAG_GDATA = "data";
private static final String TAG_DATA = "data";
private static final String TAG_STATUSES = "statuses";
private static final String TAG_NAME = "name";
private static final String TAG_FROM = "from";
private static final String TAG_UPDATE = "updated_time";
private static final String TAG_ID = "id";
private static final String TAG_FRIENDS = "friends";
private static final String TAG_MESSAGE = "message";


// contacts JSONArray
JSONArray contacts = null;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    // Hashmap for ListView
    ArrayList<HashMap<String, String>> contactList = new ArrayList<HashMap<String, String>>();

    // Creating JSON Parser instance
    JSONParser jParser = new JSONParser();

    // getting JSON string from URL
    JSONObject json = jParser.getJSONFromUrl(url);


    //Here starts the MESS
    try {
        // Getting Array of Contacts
        JSONObject arrfriends = json.getJSONObject(TAG_FRIENDS);
        JSONObject genData = arrfriends.getJSONObject(TAG_GDATA);

        JSONArray generalData = ;

        for(int i=0; i < contacts.length(); i++) { // Loop over each each row
            JSONObject row = contacts.getJSONObject(i); // Get row object
            JSONObject c = row.getJSONObject(TAG_DATA);

            for(int j=0; j < c.length(); j++){                              

                JSONObject from = c.getJSONObject(TAG_FROM);
                String name = from.getString(TAG_NAME);
                String id = from.getString(TAG_ID);
                String message = c.getString(TAG_MESSAGE);
                String update = c.getString(TAG_UPDATE);
                String mId = c.getString(TAG_ID);
                // creating new HashMap

                HashMap<String, String> map = new HashMap<String, String>();
                // adding each child node to HashMap key => value

                map.put(TAG_NAME, name);
                map.put(TAG_ID, id);
                map.put(TAG_MESSAGE, message);
                map.put(TAG_UPDATE, update);
                map.put(TAG_ID, mId);

                // adding HashList to ArrayList
                contactList.add(map);
            }
        }

    } catch (JSONException e) {
        e.printStackTrace();
    }


    /**
     * Updating parsed JSON data into ListView
     * */
    ListAdapter adapter = new SimpleAdapter(this, contactList,
            R.layout.list_item,
            new String[] { TAG_NAME, TAG_MESSAGE, TAG_UPDATE }, new int[] {
                    R.id.name, R.id.email, R.id.mobile });

    setListAdapter(adapter);

    // selecting single ListView item
    ListView lv = getListView();

    // Launching new screen on Selecting Single ListItem
    lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            // getting values from selected ListItem
            String name = ((TextView) view.findViewById(R.id.name)).getText().toString();
            String cost = ((TextView) view.findViewById(R.id.email)).getText().toString();
            String description = ((TextView) view.findViewById(R.id.mobile)).getText().toString();

            // Starting new intent
            Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
            in.putExtra(TAG_NAME, name);
            in.putExtra(TAG_MESSAGE, cost);
            in.putExtra(TAG_UPDATE, description);
            startActivity(in);

        }
    });



}

}
4

3 回答 3

2

请使用 GSON https://code.google.com/p/google-gson/,它将您的 JSON 转换为 Java 对象,并且您可以从 Java 对象轻松获得所需的任何属性。

于 2013-08-23T12:49:04.257 回答
0

以下代码说明了如何解析此 jsonResponse。将其保存在hashmap中的代码没有写,如果您理解解析,您可以自己轻松完成。

JSONObject job = new JSONObject(jsonResponse);
String friendResponse = job.optString("friends");

//Now friendResponse is also a JSONObject
JSONObject friendResponse = new JSONObject(friendResponse);
String data = friendResponse.optString("data");

//Now...data is a JSONArray

JSONArray jar = new JSONArray(data);
for(int i=0;i<jar.size();i++){
    String friendsDataJson = jar.getString(i);
    //Handle the values here... you may have to make more JSONObjects to parse. 
}
于 2013-08-23T12:20:34.530 回答
0

首先你应该清楚 JSON 对象和 JSON 数组。有关详细信息,请参阅本文和有关 stackoverflow 的类似查询。

在您的情况下,您没有正确获取数据数组,而不是

 JSONObject arrfriends = json.getJSONObject(TAG_FRIENDS);
    JSONObject genData = arrfriends.getJSONObject(TAG_GDATA);

它应该是

 JSONObject arrfriends = json.getJSONObject(TAG_FRIENDS);
    JSONObject genData = arrfriends.getJSONArray(TAG_GDATA);

然后你可以像这样遍历 genData 数组

for ( int i=0;i<genData.length();i++)
{
JSONObject contact=genData.getJSONObject(i);

}

必须应用相同的逻辑以在 json 中进行进一步解析。

于 2013-08-23T12:46:02.627 回答