【问题标题】:java parse tweet corpus jsonjava解析推文语料库json
【发布时间】:2017-12-03 10:33:03
【问题描述】:

我有一个问题:我需要用 Java 解析一个 JSON 文件,其中每一行代表一条推文,并遵循 Twitter 的标准 JSON。我不需要所有信息,我附上两张照片,向您展示我需要哪些字段。我会在不使用任何支持库的情况下做到这一点。谢谢!

这就是我现在所做的。我认为这不是最好的方法,尤其是继续我会遇到麻烦,因为许多字段的名称重复

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TweetCorpus implements Iterable<Tweet>
{
    private List<Tweet> tweets;

    public static TweetCorpus parseFile(File file)
    {
        List<Tweet> tweets = new ArrayList<>();

        try(BufferedReader br = Files.newBufferedReader(file.toPath()))
        {
            while(br.ready())
            {
                String tweet = br.readLine();
                //System.out.println(tweet);
                if(!tweet.isEmpty())
                {
                    long l = Long.parseLong(tweet.substring(tweet.indexOf("\"id\":") + 5, tweet.indexOf(",\"id_str\":")));
                    String t = tweet.substring(tweet.indexOf(",\"text\":\"") + 9, tweet.indexOf(",\"source\":"));
                    tweets.add(new Tweet(l, t));
                }
            }
        }
        catch(IOException e)
        {
            e.printStackTrace();
        }

        return new TweetCorpus(tweets);
    }

    public int getTweetCount() { return tweets.size(); }

    public TweetCorpus(List<Tweet> tweets)
    {
        this.tweets = tweets;
    }

    @Override
    public Iterator<Tweet> iterator()
    {
        return tweets.iterator();
    }

    public static void main(String[] args)
    {
        TweetCorpus t = parseFile(new File("C:\\Users\\acer\\Desktop\\Moroder\\Uni\\1 Anno - 2 Semestre\\Metodologie Di Programmazione\\Progetto\\HM4Test\\tweetsCorpus.js"));
        t.getTweetCount();

    }
}

json 媒体/转推推文

json“正常”推文

【问题讨论】:

    标签: java json twitter


    【解决方案1】:

    您可以使用 Gson 或 Jackson java 库将 json 解析为 Tweet 对象。它们是从 json 生成 pojo 的在线工具,您可以将其与 jackson 一起使用,将您的 json 字符串解析为对象。

    一旦对象中有 json 值,就可以使用 getter/setter 从输入 json 中提取/修改您感兴趣的值。

    编写自己的解析器将是一项重新发明轮子的任务。但如果您需要编写自己的解析器,请参考 github 上的 jackson 项目,以获取设计和维护方面的灵感。 这将有助于您制作通用应用程序。

    杰克逊解析器快速参考, https://dzone.com/articles/processing-json-with-jackson

    【讨论】:

      【解决方案2】:

      仅使用 readLine() 重新发明 JSON 解析器是一个非常糟糕的主意。如果你没有手工编写解析器的经验,你最终会得到很多很难理解的糟糕代码。只需使用图书馆。 Java 有大量优秀的 JSON 库。

      示例代码:

      static class User {
          String id, name;
      }
      static class MyTweet {
          String id, text;
          User user;
      }
      // if the entire file is a JSON array:
      void parse(Reader r) {
          List<MyTweet> tweets = objectMapper.readValue(
              r, new TypeReference<List<MyTweet>>(){});
      }
      // if each line is a single JSON object:
      void parse(BufferedReader r) {
          while (r.ready()) {
              String line = r.readLine();
              MyTweet tweet = objectMapper.readValue(line, MyTweet.class);
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2013-01-19
        • 1970-01-01
        • 2019-06-09
        • 2015-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-20
        • 1970-01-01
        相关资源
        最近更新 更多