找不到适合解析的方法(java.io.InputStream)

时间:2018-11-11 16:42:26

标签: java json

我用Java编写了此代码:

import java.io.FileReader;
import java.util.Iterator;

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public class Example1 {
 public static String readReddit()throws IOException, URISyntaxException {   

    JSONParser parser = new JSONParser();
    try {
        Object obj = parser.parse(Example1.class.getClassLoader().getResourceAsStream("data/reddit/redditdump.json"));

        JSONObject jsonObject = (JSONObject) obj;
        String kind = (String) jsonObject.get("kind");
        JSONArray data = (JSONArray) jsonObject.get("data");

        System.out.println("Kind:" + kind);
        System.out.println("Data:");
        Iterator<String> iterator = data.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }catch (Exception e){
        e.printStackTrace();
    }
 return null;
}

在maven中具有以下依赖性:

<dependency>
   <groupId>com.googlecode.json-simple</groupId>
   <artifactId>json-simple</artifactId>
   <version>1.1.1</version>
</dependency>

,我想从此JSON文件读取:

[{
    "kind": "Listing",
    "data": {
        "modhash": "",
        "children": [{
            "kind": "t3",
            "data": {
                "contest_mode": false,
                "banned_by": null,
                "media_embed": {

                },
                "subreddit": "PoliticalDiscussion",
                "selftext_html": "&lt;!-- SC_OFF --&gt;&lt;div class=\"md\"&gt;&lt;p&gt;The first Presidential Debate for the 2016 Elections will air tonight at 9:00PM Eastern at Hofstra University in New York. The debate will feature Donald Trump and Hillary Clinton in their first head-to-head televised debate. The debate will be 90 minutes and commercial free.&lt;/p&gt;\n\n&lt;p&gt;The Debate is hosted by the Commission on Presidential Debates and will be moderated by NBC’s Lester Holt. Hillary Clinton will &lt;a href=\"https://twitter.com/CBSNews/status/780506360257675264\"&gt;receive the first question&lt;/a&gt;.&lt;/p&gt;\n\n&lt;hr/&gt;\n\n&lt;h2&gt;&lt;strong&gt;Where to Watch&lt;/strong&gt;&lt;/h2&gt;\n\n&lt;p&gt;Unlike the primaries, these debates are hosted by the Commission on Presidential Debates and the broadcast is not restricted to one network, making for a wide range of viewing options. Here are just a few of the ways you can watch:&lt;/p&gt;\n\n&lt;p&gt;&lt;strong&gt;Television:&lt;/strong&gt;&lt;/p&gt;\n\n&lt;p&gt;The event will be broadcast on most major TV channels, including ABC, CBS, CNN, C-SPAN, Fox News, MSNBC, and Univision.&lt;/p&gt;\n\n&lt;p&gt;&lt;strong&gt;Live Streams:&lt;/strong&gt;&lt;/p&gt;\n\n&lt;p&gt;&lt;a href=\"https://www.c-span.org/2016presidentialDebates/\"&gt;C-SPAN&lt;/a&gt;&lt;/p&gt;\n\n&lt;p&gt;&lt;a href=\"https://www.youtube.com/watch?v=L6QElWIKfDk\"&gt;Washington Post (YouTube)&lt;/a&gt;&lt;/p&gt;\n\n&lt;p&gt;&lt;a href=\"https://www.youtube.com/watch?v=EuHuzhzb1nc\"&gt;PBS (YouTube)&lt;/a&gt;&lt;/p&gt;\n\n&lt;p&gt;&lt;a href=\"https://www.youtube.com/watch?v=855Am6ovK7s\"&gt;NBC (YouTube)&lt;/a&gt;&lt;/p&gt;\n\n&lt;p&gt;&lt;a href=\"https://twitter.com/i/live/778347749217406976\"&gt;Bloomberg Politics (Twitter with real-time fact checking)&lt;/a&gt;&lt;/p&gt;\n\n&lt;p&gt;&lt;a href=\"https://www.facebook.com/ABCNews/\"&gt;ABC (Facebook)&lt;/a&gt;&lt;/p&gt;\n\n&lt;hr/&gt;\n\n&lt;h2&gt;&lt;strong&gt;Live Discussion&lt;/strong&gt;&lt;/h2&gt;\n\n&lt;p&gt;If you&amp;#39;d like to participate in real-time discussion, we encourage you to head over to &lt;a href=\"https://discord.gg/caAhhCv\"&gt;our Discord server&lt;/a&gt; and check out our &lt;a href=\"https://discordapp.com/channels/154635757615710208/229738984618721280\"&gt;Presidential Debate Channel&lt;/a&gt;. &lt;/p&gt;\n\n&lt;hr/&gt;\n\n&lt;p&gt;Please use this thread to discuss your tonight&amp;#39;s debate as it happens. All subreddit rules still apply in live threads and in Discord, so please remember to remain civil and try to keep discussion quality high. &lt;strong&gt;This thread will be closely watched, and any rule violations are certain to be met with heavy-handed moderation. Be nice!&lt;/strong&gt;&lt;/p&gt;\n&lt;/div&gt;&lt;!-- SC_ON --&gt;",
                "selftext": "The first Presidential Debate for the 2016 Elections will air tonight at 9:00PM Eastern at Hofstra University in New York. The debate will feature Donald Trump and Hillary Clinton in their first head-to-head televised debate. The debate will be 90 minutes and commercial free.\n\nThe Debate is hosted by the Commission on Presidential Debates and will be moderated by NBC’s Lester Holt. Hillary Clinton will [receive the first question](https://twitter.com/CBSNews/status/780506360257675264).\n\n-----\n\n**Where to Watch**\n-\n\nUnlike the primaries, these debates are hosted by the Commission on Presidential Debates and the broadcast is not restricted to one network, making for a wide range of viewing options. Here are just a few of the ways you can watch:\n\n**Television:**\n\nThe event will be broadcast on most major TV channels, including ABC, CBS, CNN, C-SPAN, Fox News, MSNBC, and Univision.\n\n**Live Streams:**\n\n[C-SPAN](https://www.c-span.org/2016presidentialDebates/)\n\n[Washington Post (YouTube)](https://www.youtube.com/watch?v=L6QElWIKfDk)\n\n[PBS (YouTube)](https://www.youtube.com/watch?v=EuHuzhzb1nc)\n\n[NBC (YouTube)](https://www.youtube.com/watch?v=855Am6ovK7s)\n\n[Bloomberg Politics (Twitter with real-time fact checking)](https://twitter.com/i/live/778347749217406976)\n\n[ABC (Facebook)](https://www.facebook.com/ABCNews/)\n\n------\n\n**Live Discussion**\n-\n\nIf you'd like to participate in real-time discussion, we encourage you to head over to [our Discord server](https://discord.gg/caAhhCv) and check out our [Presidential Debate Channel](https://discordapp.com/channels/154635757615710208/229738984618721280). \n\n----------\n\nPlease use this thread to discuss your tonight's debate as it happens. All subreddit rules still apply in live threads and in Discord, so please remember to remain civil and try to keep discussion quality high. **This thread will be closely watched, and any rule violations are certain to be met with heavy-handed moderation. Be nice!**",
                "likes": null,
                "suggested_sort": "new",
                "user_reports": [],
                "secure_media": null,
                "saved": false,
                "id": "54nuut",
                "gilded": 0,
                "secure_media_embed": {                 
                },
                "clicked": false,
                "report_reasons": null,
                "author": "BagOnuts",
                "media": null,
                "score": 550,
                "approved_by": null,
                "over_18": false,
                "domain": "self.PoliticalDiscussion",
                "hidden": false,
                "num_comments": 8576,
                "thumbnail": "",
                "subreddit_id": "t5_2sfmf",
                "edited": 1474937730,
                "link_flair_css_class": "green2",
                "author_flair_css_class": "",
                "downs": 0,
                "archived": false,
                "removal_reason": null,
                "stickied": false,
                "is_self": true,
                "hide_score": false,
                "permalink": "/r/PoliticalDiscussion/comments/54nuut/debate_megathread_live_discussion_thread_for_the/",
                "locked": false,
                "name": "t3_54nuut",
                "created": 1474964458,
                "url": "https://www.reddit.com/r/PoliticalDiscussion/comments/54nuut/debate_megathread_live_discussion_thread_for_the/",
                "author_flair_text": "Extra Nutty",
                "quarantine": false,
                "title": "[Debate Megathread] LIVE Discussion Thread for the First Presidential Debate of 2016",
                "created_utc": 1474935658,
                "link_flair_text": "Presidential Debate",
                "ups": 550,
                "upvote_ratio": 0.83,
                "mod_reports": [],
                "visited": false,
                "num_reports": null,
                "distinguished": null
            }
        }],
        "after": null,
        "before": null
    }
},
{
    "kind": "Listing",
    "data": {
        "modhash": "",
        "children": [{
            ..

但出现错误:

  

错误:(132,32)Java:找不到适合的方法   parse(java.io.InputStream)

     

org.json.simple.parser.JSONParser.parse(java.lang.String)方法不适用

     

(参数不匹配; java.io.InputStream无法转换为java.lang.String)

     

org.json.simple.parser.JSONParser.parse(java.io.Reader)方法不适用

     

(参数不匹配; java.io.InputStream无法转换为java.io.Reader)

我找不到问题所在。另外,我不仅要打印得到的结果,还要保存并使用。我对Java没有太多的经验。任何帮助将不胜感激。也许我没有导入任何依赖项?

2 个答案:

答案 0 :(得分:0)

可以请您尝试以下代码。

wait()

答案 1 :(得分:0)

getResourceAsStream表示您有InputStream作为返回对象。而您的例外是no suitable method found for parse(java.io.InputStream)表示方法parser.parse()不接受InputStream。您必须查看此方法的实现,并找出哪种类型的对象接受此方法并将InputStream转换为其中一种。我看到至少StringReader是可以接受的,并且我将InputStream转换为Reader

public static String readReddit() {
    JSONParser parser = new JSONParser();

    try (Reader reader = new InputStreamReader(Example1.class.getClassLoader().getResourceAsStream("data/reddit/redditdump.json"))) {
        ((JSONArray)parser.parse(reader)).forEach((Consumer<JSONObject>)obj -> {
            String kind = (String)obj.get("kind");
            JSONObject data = (JSONObject)obj.get("data");
            JSONArray children = (JSONArray)data.get("children");
            System.out.println("Kind: " + kind + ", total children: " + children.size());
        });
    } catch(Exception e) {
        e.printStackTrace();
    }

    return null;
}