2017-06-29 4 views
0

私は問題があります:各行がツイートを表し、Twitterの標準JSONに従うJSONファイルをJavaで解析する必要があります。私はすべての情報を必要としません、私はあなたに必要なフィールドを示すために2枚の写真を添付し​​ます。私はサポートライブラリを使用せずにそれを行うだろう。ありがとうございました!java parse tweet corpus 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 media/retweet tweet

JSONを繰り返しているので、特に私はトラブルになります先に行く、それはそれを行うための最善の方法だとは思いません「ノーマル」を使用してJSONパーサーを再発明し json "normal" tweet

答えて

0

つぶやきのみreadLine()は本当に悪い考えです。パーザを手で書く経験がなければ、本当に理解しにくい多くの悪いコードに終わるでしょう。ちょうどライブラリを使用してください。 Javaには数多くのJSONライブラリがあります。

  • GSON
  • Jackson
  • 例コード:

    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); 
        } 
    } 
    
    0

    あなたがオブジェクトをツイートするJSONを解析するGsonまたはJackson Javaライブラリを使用することができます。彼らはjsonからpojoを生成するオンラインツールです.jsonを使ってjsonの文字列を解析して、それに反対することができます。あなたがオブジェクトにJSON値を持ったら

    、あなたが入力JSONからで興味を持っている値を変更/抽出するためにゲッター/セッターを使用することができます。

    あなた自身のパーサを書くことは、車輪の種類の仕事を再発明することになります。しかし、あなた自身のパーサーを書く必要があるならば、設計とメンテナンスのインスピレーションのためにgithubのjacksonプロジェクトを参照してください。 これは、汎用アプリケーションの作成に役立ちます。