在 Java 中从 URL 读取 JSON 的最简单方法
这可能是一个愚蠢的问题,但是在Java中从URL读取和解析JSON的最简单方法是什么?
在Groovy中,这是几行代码的问题。我发现的Java示例非常长(并且具有巨大的异常处理块)。
我想做的就是阅读此链接的内容。
这可能是一个愚蠢的问题,但是在Java中从URL读取和解析JSON的最简单方法是什么?
在Groovy中,这是几行代码的问题。我发现的Java示例非常长(并且具有巨大的异常处理块)。
我想做的就是阅读此链接的内容。
使用Maven工件,我得到了以下代码,我认为这很短。不是尽可能短,但仍然可用。org.json:json
package so4308554;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.nio.charset.Charset;
import org.json.JSONException;
import org.json.JSONObject;
public class JsonReader {
private static String readAll(Reader rd) throws IOException {
StringBuilder sb = new StringBuilder();
int cp;
while ((cp = rd.read()) != -1) {
sb.append((char) cp);
}
return sb.toString();
}
public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
InputStream is = new URL(url).openStream();
try {
BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
String jsonText = readAll(rd);
JSONObject json = new JSONObject(jsonText);
return json;
} finally {
is.close();
}
}
public static void main(String[] args) throws IOException, JSONException {
JSONObject json = readJsonFromUrl("https://graph.facebook.com/19292868552");
System.out.println(json.toString());
System.out.println(json.get("id"));
}
}
以下是Jackson的几个替代版本(因为您可能希望数据有多种方式):
ObjectMapper mapper = new ObjectMapper(); // just need one
// Got a Java class that data maps to nicely? If so:
FacebookGraph graph = mapper.readValue(url, FaceBookGraph.class);
// Or: if no class (and don't need one), just map to Map.class:
Map<String,Object> map = mapper.readValue(url, Map.class);
特别是通常的(IMO)情况,你想处理Java对象,可以做成一个衬里:
FacebookGraph graph = new ObjectMapper().readValue(url, FaceBookGraph.class);
其他库,如Gson也支持单行方法;为什么许多例子显示更长的部分很奇怪。更糟糕的是,许多示例使用过时的org.json库;它可能是第一件事,但是有六个更好的替代品,所以没有理由使用它。