json字符串中的特定信息

病毒

我在Eclipse中使用推文已有一段时间了,这些推文以json字符串形式呈现。

为此,我创建了一个名为Tweet的对象(原始的,是吧?),该对象从json字符串中获取某些信息,并将其存储在Tweet对象中。没有什么花哨。

我的Tweet类如下所示:

public class Tweet implements TwitterMelding {

public Tweet() {
}

String created_at;
String id;
String text;
String user;

public void setUser(String user) {
    this.user = user;
}

public void setText(String text) {
    this.text = text;
}

public void setId(String id) {
    this.id = id;
}

public void setCreated_at(String created_at) {
    this.created_at = created_at;
}
}

现在,看起来很简单,但是其中一种无效。

特别是String用户假设要做的是存储发布推文的用户的用户ID。

以下是从Twitter获得的全部可怕的推文:

{"created_at":"Sat Feb 08 15:37:37 +0000 2014","id":432176397474623489,"id_str":"432176397474623489","text":"Skal begynne \u00e5 selge vekter.. Eneste m\u00e5ten det konstant kommer penger i lommen","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":366301747,"id_str":"366301747","name":"skinny-pete","screen_name":"JFarsund","location":"bj\u00f8rge","url":null,"description":"j\u00f8rgen er en tynn gutt med pack.. Men det teller vel ikke? Det gj\u00f8r vel ikke bio heller","protected":false,"followers_count":427,"friends_count":291,"listed_count":2,"created_at":"Thu Sep 01 23:03:49 +0000 2011","favourites_count":5103,"utc_offset":3600,"time_zone":"Copenhagen","geo_enabled":true,"verified":false,"statuses_count":8827,"lang":"no","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/pbs.twimg.com\/profile_background_images\/378800000089578611\/6840970475350d63190eb05d3d7e47ec.png","profile_background_image_url_https":"https:\/\/pbs.twimg.com\/profile_background_images\/378800000089578611\/6840970475350d63190eb05d3d7e47ec.png","profile_background_tile":true,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/431961396528414720\/EwkxQBkW_normal.jpeg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/431961396528414720\/EwkxQBkW_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/366301747\/1391822743","profile_link_color":"0084B4","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":{"type":"Point","coordinates":[60.33700829,5.24626808]},"coordinates":{"type":"Point","coordinates":[5.24626808,60.33700829]},"place":{"id":"2260fcb4a77f2bad","url":"https:\/\/api.twitter.com\/1.1\/geo\/id\/2260fcb4a77f2bad.json","place_type":"city","name":"Bergen","full_name":"Bergen, Hordaland","country_code":"NO","country":"Norge","contained_within":[],"bounding_box":{"type":"Polygon","coordinates":[[[5.1602697,60.1848543],[5.1602697,60.5335445],[5.6866852,60.5335445],[5.6866852,60.1848543]]]},"attributes":{}},"contributors":null,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[],"symbols":[],"urls":[],"user_mentions":[]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"no"}

这真是一个漫长的痛苦。

我在下一个添加了一些“ ...”,以使其更具可读性,仅显示我感兴趣的值:

{…,"user":{"id":366301747,"id_str":"366301747","name":"skinny-pete","screen_name":"JFarsund","location":"bj\u00f8rge","url":null,"description":"j\u00f8rgen er en tynn gutt med pack.. Men det teller vel ikke? Det gj\u00f8r vel ikke bio heller","protected":false,"followers_count":427,"friends_count":291,"listed_count":2,"created_at":"Thu Sep 01 23:03:49 +0000 2011","favourites_count":5103,"utc_offset":3600,"time_zone":"Copenhagen","geo_enabled":true,"verified":false,"statuses_count":8827,"lang":"no","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"C0DEED","profile_background_image_url":"http:\/\/pbs.twimg.com\/profile_background_images\/378800000089578611\/6840970475350d63190eb05d3d7e47ec.png","profile_background_image_url_https":"https:\/\/pbs.twimg.com\/profile_background_images\/378800000089578611\/6840970475350d63190eb05d3d7e47ec.png","profile_background_tile":true,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/431961396528414720\/EwkxQBkW_normal.jpeg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/431961396528414720\/EwkxQBkW_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/366301747\/1391822743","profile_link_color":"0084B4","profile_sidebar_border_color":"FFFFFF","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null}, …}

是的,还有我吗?

如上所述,我想要的是用户ID,我希望将其分配给Tweet对象中的变量“ user”。

{…,"user":{"id":366301747,"id_str":"366301747",… }…}

我想要的是将数字366301747分配给我的Tweet对象中的变量“ user”。

但是对于我的一生,我似乎无法。

为了确保Tweet对象获取所需的信息,而不获取不需要的信息,我使用了Jackson对象:

ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

所以我的问题。

如何告诉Tweet从json字符串中获取366301747号并将其分配给变量“ user”?

我更希望它仅与Jackson一起使用,而不需要导入过多的JAR。

请原谅墙。

PopoFibo

使用Gson可以很简单

从那以后,您已经完成了创建pojo的艰苦工作,通过查看json您可以确认这User是一个有效的json对象而不是一个String值。

因此,让我们用以下命令稍微修改pojo的(Tweetuser属性:

User user;

public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}

User自定义类是:

public class User {
    private String id;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

现在,只需调用您的Gson方法即可将您的对象从转换json(我将json转换为文件并通过读取BufferedReader):

public static void main(String[] args) throws FileNotFoundException {
        Gson gson = new Gson();
        BufferedReader br = new BufferedReader(new FileReader(
                "json.txt"));

        Tweet tweetObj = gson.fromJson(br, Tweet.class);
        System.out.println(tweetObj.getUser().getId());
    }

输出:

366301747

编辑:基于评论,使用杰克逊的解决方案-2个选项

  1. 保留新创建的User类,ObjectMapper代码保持不变,并System.out.println(tweet.getUser().getId())获得用户ID。
  2. 如果User不使用类,则将您更改Tweet为以下形式:

码:

public class Tweet {

    String created_at;
    String id;
    String text;
    Map<String, String> user;

    public String getCreated_at() {
        return created_at;
    }

    public void setCreated_at(String created_at) {
        this.created_at = created_at;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getText() {
        return text;
    }

    public void setText(String text) {
        this.text = text;
    }

    public Map<String, String> getUser() {
        return user;
    }

    public void setUser(Map<String, String> user) {
        this.user = user;
    }

}

并将userid调用方法中的打印为:

ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

Tweet tweet = mapper.readValue(br, Tweet.class);

System.out.println(tweet.getUser().get("id"));

让您:

366301747

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从以字符串表示的数组中获取特定信息?

来自分类Dev

如何从以字符串表示的数组中获取特定信息?

来自分类Dev

根据条件替换Json字符串中的信息

来自分类Dev

从json字符串获取信息?

来自分类Dev

从JSON字符串打印信息

来自分类Dev

从字符串中读取信息

来自分类Dev

如何从JSON字符串中检索特定密钥的数据

来自分类Dev

如何计算json中的特定子字符串

来自分类Dev

如何从字符串或 json(string) 中解析特定的子字符串?

来自分类Dev

从字符串中删除特定的字符

来自分类Dev

从字符串中删除特定字符

来自分类Dev

计算字符串中的特定字符

来自分类Dev

删除字符串中的特定字符

来自分类Dev

删除字符串中的特定字符

来自分类Dev

从字符串中删除特定字符

来自分类Dev

在字符串中搜索特定字符

来自分类Dev

计算字符串中的特定字符

来自分类Dev

搜索字符串中的特定字符

来自分类Dev

从字符串中删除特定字符

来自分类Dev

从字符串中删除特定字符

来自分类Dev

替换字符串中的特定字符

来自分类Dev

从字符串中获取特定的子字符串

来自分类Dev

在字符串数组中查找特定的字符串

来自分类Dev

获取特定字符串中的字符串

来自分类Dev

在字符串数组中查找特定的字符串

来自分类Dev

解析给定字符串中的特定字符串

来自分类Dev

如何在jsx中映射具有图像和文本信息的json字符串

来自分类Dev

在字符串中查找JSON字符串

来自分类Dev

无法匹配文件中解析的信息中的字符串