【发布时间】:2018-11-11 16:42:26
【问题描述】:
我是用 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": "<!-- SC_OFF --><div class=\"md\"><p>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.</p>\n\n<p>The Debate is hosted by the Commission on Presidential Debates and will be moderated by NBC’s Lester Holt. Hillary Clinton will <a href=\"https://twitter.com/CBSNews/status/780506360257675264\">receive the first question</a>.</p>\n\n<hr/>\n\n<h2><strong>Where to Watch</strong></h2>\n\n<p>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:</p>\n\n<p><strong>Television:</strong></p>\n\n<p>The event will be broadcast on most major TV channels, including ABC, CBS, CNN, C-SPAN, Fox News, MSNBC, and Univision.</p>\n\n<p><strong>Live Streams:</strong></p>\n\n<p><a href=\"https://www.c-span.org/2016presidentialDebates/\">C-SPAN</a></p>\n\n<p><a href=\"https://www.youtube.com/watch?v=L6QElWIKfDk\">Washington Post (YouTube)</a></p>\n\n<p><a href=\"https://www.youtube.com/watch?v=EuHuzhzb1nc\">PBS (YouTube)</a></p>\n\n<p><a href=\"https://www.youtube.com/watch?v=855Am6ovK7s\">NBC (YouTube)</a></p>\n\n<p><a href=\"https://twitter.com/i/live/778347749217406976\">Bloomberg Politics (Twitter with real-time fact checking)</a></p>\n\n<p><a href=\"https://www.facebook.com/ABCNews/\">ABC (Facebook)</a></p>\n\n<hr/>\n\n<h2><strong>Live Discussion</strong></h2>\n\n<p>If you&#39;d like to participate in real-time discussion, we encourage you to head over to <a href=\"https://discord.gg/caAhhCv\">our Discord server</a> and check out our <a href=\"https://discordapp.com/channels/154635757615710208/229738984618721280\">Presidential Debate Channel</a>. </p>\n\n<hr/>\n\n<p>Please use this thread to discuss your tonight&#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. <strong>This thread will be closely watched, and any rule violations are certain to be met with heavy-handed moderation. Be nice!</strong></p>\n</div><!-- SC_ON -->",
"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: 找不到合适的方法 解析(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 方面不是很有经验。任何帮助将不胜感激。也许我没有导入任何依赖项?
【问题讨论】:
-
问题正如错误消息所说。您的磁盘上没有这样的文件。该文件是一个相对文件,因此它是从执行用于启动程序的
java命令的目录中搜索的。 -
@JBNizet 但我的磁盘中有这样的文件。这就是问题所在!
-
你看完我的评论了吗?执行 java 命令的目录的绝对路径是什么? JSON文件的绝对路径是什么?
-
要查看 Java 尝试读取的文件,您可以在尝试打开文件之前添加
System.out.println(new File("data/reddit/redditdump.json").getAbsolutePath()); -
@JBNizet 我试过写目录的绝对路径,没用
/Users/myname/Desktop/javajson/src/main/resources/data/reddit/redditdump.json