2013-06-12 2 views
0

Спасибо за чтение!Вложенный анализ JSON с facebook sdk

Я пытаюсь разработать приложение для Android, но я зациклился на том, как получить пользовательские «симпатии». Все, что мне нужно, это всего лишь значения для каждого «имени». Здесь будут «Jay Chou», «Eason Chan» и «Facebook Developers». Ниже приводится текст JSON

{ 
    "languages": [ 
    { 
     "id": "111735208843636", 
     "name": "Chinese" 
    }, 
    { 
     "id": "106059522759137", 
     "name": "English" 
    } 
    ], 
    "id": "100005065353669", 
    "likes": { 
    "data": [ 
     { 
     "category": "Musician/band", 
     "name": "Jay Chou", 
     "id": "109155665769390", 
     "created_time": "2013-06-11T18:54:44+0000" 
     }, 
     { 
     "category": "Musician/band", 
     "name": "Eason Chan", 
     "id": "105468519487919", 
     "created_time": "2013-06-05T20:33:26+0000" 
     }, 
     { 
     "category": "Product/service", 
     "name": "Facebook Developers", 
     "id": "19292868552", 
     "created_time": "2013-05-31T01:35:17+0000" 
     } 
    ], 
    "paging": { 
     "next": "https://graph.facebook.com/100005065353669/likes? limit=5000&offset=5000&__after_id=19292868552" 
    } 
    } 
} 

Этот кусок кода для извлечения «язык» пользователя, и она отлично работает для меня.

JSONArray languages = (JSONArray)user.getProperty("languages"); 
if (languages.length() > 0) { 
    ArrayList<String> languageNames = new ArrayList<String>(); 

    for (int i=0; i < languages.length(); i++) { 
     JSONObject language = languages.optJSONObject(i); 
     languageNames.add(language.optString("name")); 
    } 
    userInfo.append(String.format("Languages: %s\n\n", languageNames.toString())); 
} 

user происходит от параметра функции private String buildUserInfoDisplay(GraphUser user) и userinfo происходит от StringBuilder userInfo = new StringBuilder("");

кто-нибудь может мне помочь? Действительно ценю это!

ответ

0

Я не уверен, что это верно, поскольку я не могу проверить его прямо сейчас, но он должен работать таким образом. не забудьте проверить, есть ли свойство, называемое «нравится», и если в представлении json есть массив, называемый «data», прежде чем использовать его для предотвращения NullPointers.

List<String> likes = new ArrayList<String>(); 
JSONObject jsonLikes = (JSONObject) user.getProperty("likes"); 
JSONArray jsonData = (JSONArray) likes.getProperty("data"); 

for(int i = 0; i < data.length(); i++) { 
    likes.add(jsonData.optString("name"); 
} 

список понравился, затем содержит все атрибуты «name» подобных.

+0

Спасибо за ответ! Я использовал почти точный код, который вы предоставили, он выдает ошибку NullPointer на строке getProperty («данные»). Я не могу понять, как это произойдет. Я имею в виду, что должен быть массив JSON с именем «data». – user2464763

+0

которые вы используете? – danijoo