JSON 解析器 - 写入文本文件 - 线程中的异常 "main" java.lang.NullPointerException



我正试图编写一个已被解析为ArrayList字符串到txt文件的列表JSON。然而,我一直得到这个错误:

Exception in thread "main" java.lang.NullPointerException
    at kr.ac.uos.datamining.JSONParser.parseForTweets(JSONParser.java:47)
    at kr.ac.uos.datamining.JSONParser.<init>(JSONParser.java:25)
    at kr.ac.uos.datamining.test.main(test.java:21)
这是主类代码test.java:
    package kr.ac.uos.datamining;
    import java.io.File; 
    import java.io.FileWriter;
    import java.io.FileNotFoundException; 
    import java.util.ArrayList;
    import java.util.List;
    import kr.ac.uos.datamining.JSONParser; 
    import kr.ac.uos.datamining.Tweet; 
    import kr.ac.uos.datamining.User;
    public class test {
    public static List <String> list = new ArrayList<String>();
    public static void main(String[] args) throws IOException, FileNotFoundException, InterruptedException, SQLException {
   **Line 21**
        JSONParser j = new JSONParser(new File("D:/usr/samsunggalaxy.txt"));
        ArrayList<Tweet> tweets = j.getTweets();
        for(Tweet tweet : tweets){
            User user = tweet.getUser();
            list.add(tweet.getText() + " | " + user.getScreenName());
        }
        FileWriter writer = new FileWriter("samsunggalaxy.txt");
        for(String str: list) {
            writer.write(str);
        }
        writer.close();
        }
    }

这是错误跟踪显示的JSON解析器行:

    private void parseForTweets(){
            Scanner in = null;
            try {
                in = new Scanner(json);
            } catch (FileNotFoundException e) {
            }
**Line47**          while(in.hasNextLine()){
                String rawTweet = in.nextLine();
                if(!rawTweet.contains(""retweeted":true")){
                    Tweet tweet = TweetParser.parseTweet(rawTweet);
                    tweets.add(tweet);
                }
            }
        }

我认为错误在String rawTweet = in. nextline ();然而,我似乎不能弄清楚这一点。JSON数据本身对这有影响吗?我的意思是,是因为我错误地解析了数据吗?还是另有原因?

任何帮助都将非常感激

似乎问题在于您没有处理异常,因此,如果new Scanner(json)行失败,则in引用将为空。在这种情况下,您将在while(in.hasNextLine())行失败。

但是,如果代码中没有行号,很难准确地判断这是否真的是问题所在。

如果您确定问题是在。nextline()(请调试您的代码,以确定问题在哪里)那就试试这个:

 Iterator<JSONObject> iterator = yourJsonObject.iterator();
 while (iterator.hasNext()) {
 JSONObject factObj = (JSONObject) iterator.next();
 ...
 }

最新更新