2010-11-27 62 views
0

我見過不少人遇到了GSON庫的問題 - 我仍然找不到解決我的問題的方法。通過GSON解析Twitter公共時間線(JSON)到Java對象

我想要實現的是將JSON從Twitter's public timeline解析爲帶有GSON的POJO。

以下是我的Twitter的JSON結構的表示:

public class OneTweet { 


public OneTweet() 
{ 
    // Empty constructor 
} 


public String coordinates; 
public String favorited; 
public String created_at; 
public String truncated; 
public String text; 
public String contributors; 
public String id; 
public String geo; 
public String in_reply_to_user_id; 
public String place; 
public String in_reply_to_screen_name; 
//public user user; 

public List<user> user; 


public String source; 
public String something; 


} 

public class user { 

public String name; 
public String profile_sidebar_border_color; 
public String profile_background_tile; 
public String profile_sidebar_fill_color; 
public String created_at; 
public String profile_image_url; 
public String location; 
public String profile_link_color; 
public String follow_request_sent; 
public String url; 
public String favourites_count; 
public String contributors_enabled; 
public String utc_offset; 
public String id; 
public String profile_use_background_image; 
public String profile_text_color; 

// protected is a reserved identifier 
public String pprotected; 

public String followers_count; 
public String lang; 
public String notifications; 
public String time_zone; 
public String verified; 
public String profile_background_color; 
public String geo_enabled; 
public String description; 
public String friends_count; 
public String statuses_count; 
public String profile_background_image_url; 
public String following; 
public String in_reply_to_status_id; 
public String screen_name; 

} 

Map<String, OneTweet> json_string_array = googlejson.fromJson(jsonstring, new TypeToken<Map<String, OneTweet>>(){}.getType()); 

我目前得到以下錯誤:

Exception in thread "main" com.google.gson.JsonParseException: Expecting object found: false

我猜測我的POJO結構是錯誤的,或者它可能與JSON對象「protected」是Java中的受保護標識符有關。如果後者是這種情況,我不知道如何解決它。

+1

如果您在包裹`嘗試{...}趕上(例外五)調用這是什麼輸出{e.printStackTrace(); ``? – mckamey 2010-11-27 20:45:52

回答

4

爲什麼要重新發明輪子?您可以使用twitter4j。它完成所有的解析,併爲您提供所需的對象。

+0

嘗試過 - 並且工作! – jcfrei 2010-11-28 23:14:25

2

所有字段都不是字符串。 例如:通知是布爾

import com.google.gson.annotations.SerializedName; 

    public class Tweets { 

@SerializedName("geo") 
public String geo; 

@SerializedName("in_reply_to_status_id") 
public String in_reply_to_status_id; 

@SerializedName("truncated") 
public String truncated; 

@SerializedName("created_at") 
public String created_at; 

@SerializedName("retweet_count") 
public String retweet_count; 

@SerializedName("in_reply_to_user_id") 
public String in_reply_to_user_id; 

@SerializedName("id_str") 
public String id_str; 

@SerializedName("place") 
public String place; 

@SerializedName("favorited") 
public boolean favorited; 

@SerializedName("source") 
public String source; 

@SerializedName("in_reply_to_screen_name") 
public String in_reply_to_screen_name; 

@SerializedName("in_reply_to_status_id_str") 
public String in_reply_to_status_id_str; 

@SerializedName("id") 
public long id; 

@SerializedName("contributors") 
public String contributors; 

@SerializedName("coordinates") 
public String coordinates; 

@SerializedName("retweeted") 
public boolean retweeted; 

@SerializedName("text") 
public String text; 

@SerializedName("profile_image_url") 
public String profile_image_url; 

// public user user; 
public User user; 


} 

import com.google.gson.annotations.SerializedName; 

public class User { 

@SerializedName("friends_count") 
public int friends_count; 

@SerializedName("profile_background_color") 
public String profile_background_color; 

@SerializedName("profile_background_image_url") 
public String profile_background_image_url; 

@SerializedName("created_at") 
public String created_at; 

@SerializedName("description") 
public String description; 

@SerializedName("favourites_count") 
public int favourites_count; 

@SerializedName("lang") 
public String lang; 

@SerializedName("notifications") 
public boolean notifications; 

@SerializedName("id_str") 
public String id_str; 

@SerializedName("default_profile_image") 
public boolean default_profile_image; 

@SerializedName("profile_text_color") 
public String profile_text_color; 

@SerializedName("default_profile") 
public boolean default_profile; 

@SerializedName("show_all_inline_media") 
public boolean show_all_inline_media; 

@SerializedName("contributors_enabled") 
public boolean contributors_enabled; 

@SerializedName("geo_enabled") 
public boolean geo_enabled; 

@SerializedName("screen_name") 
public String screen_name; 

@SerializedName("profile_sidebar_fill_color") 
public String profile_sidebar_fill_color; 

@SerializedName("profile_image_url") 
public String profile_image_url; 

@SerializedName("profile_background_tile") 
public boolean profile_background_tile; 

@SerializedName("follow_request_sent") 
public boolean follow_request_sent; 

@SerializedName("url") 
public String url; 

@SerializedName("statuses_count") 
public int statuses_count; 

@SerializedName("following") 
public boolean following; 

@SerializedName("time_zone") 
public String time_zone; 

@SerializedName("profile_link_color") 
public String profile_link_color; 

@SerializedName("protected") 
public boolean protectedd; 

@SerializedName("verified") 
public boolean verified; 

@SerializedName("profile_sidebar_border_color") 
public String profile_sidebar_border_color; 

@SerializedName("followers_count") 
public int followers_count; 

@SerializedName("location") 
public String location; 

@SerializedName("name") 
public String name; 

@SerializedName("is_translator") 
public boolean is_translator; 

@SerializedName("id") 
public long id; 

@SerializedName("listed_count") 
public int listed_count; 

@SerializedName("profile_use_background_image") 
public boolean profile_use_background_image; 

@SerializedName("utc_offset") 
public int utc_offset; 

}