我遇到了一个问题:我需要在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 media /转发推文
json“正常”推文
答案 0 :(得分:0)
仅使用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);
}
}
答案 1 :(得分:0)
您可以使用Gson或Jackson java库将json解析为Tweet对象。他们是在线工具,可以从json生成pojo,你可以使用jackson将你的json字符串解析为object。
在对象中有json值后,可以使用getters / setter从输入json中提取/修改您感兴趣的值。
编写自己的解析器将重新创建轮式任务。但如果您需要编写自己的解析器,请参阅github上的jackson项目,获取设计和维护的灵感。 这将有助于您制作通用应用程序。
jackson解析器的快速参考, https://dzone.com/articles/processing-json-with-jackson