【问题标题】:Parsing Twitter Public Timeline (JSON) into Java Objects via GSON通过 GSON 将 Twitter 公共时间线 (JSON) 解析为 Java 对象
【发布时间】:2010-11-27 20:36:47
【问题描述】:

我看到很多人在使用 GSON 库时遇到问题 - 我仍然找不到解决问题的方法。

我想要实现的是使用 GSON 将 JSON 从 Twitter's public timeline 解析为 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());

我目前收到以下错误:

线程“主”com.google.gson.JsonParseException 中的异常:找到预期对象:false

我猜我的 POJO 结构是错误的,或者可能与 JSON 对象“受保护”是 Java 中的受保护标识符这一事实有关。如果是后者,我不知道如何解决。

【问题讨论】:

  • 如果将调用包装在try {...} catch (Exception e) { e.printStackTrace(); } 中会输出什么?

标签: java json twitter gson


【解决方案1】:

为什么要重新发明轮子?您可以使用twitter4j。它完成所有解析,并为您提供所需的对象。

【讨论】:

    【解决方案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;
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多