从java中的URL读取json的最简单方法

问题

这可能是一个愚蠢的问题但是什么是最简单的阅读和解析方式JSONfromURLinJava

在Groovy中,这只是几行代码的问题。我发现的Java示例非常冗长(并且具有巨大的异常处理块)。

我想做的就是阅读this link的内容。


#1 热门回答(165 赞)

使用Maven artifactorg.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"));
  }
}

#2 热门回答(59 赞)

这里有几个替代版本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);

特别是你想要处理Java对象的通常(IMO)情况,可以做成一个班轮:

FacebookGraph graph = new ObjectMapper().readValue(url, FaceBookGraph.class);

像Gson这样的其他lib也支持单行方法;为什么许多例子显示更长的部分是奇怪的。更糟糕的是,许多示例使用过时的org.json库;它可能是第一件事,但有六个更好的替代品,所以几乎没有理由使用它。


#3 热门回答(44 赞)

最简单的方法:使用gson,谷歌自己的goto json library.https://code.google.com/p/google-gson/

这是一个样本。我要去这个免费的geolocator网站并解析json并显示我的邮政编码。 (只是将这些东西放在一个主要的方法来测试它)

String sURL = "http://freegeoip.net/json/"; //just a string

    // Connect to the URL using java's native library
    URL url = new URL(sURL);
    URLConnection request = url.openConnection();
    request.connect();

    // Convert to a JSON object to print data
    JsonParser jp = new JsonParser(); //from gson
    JsonElement root = jp.parse(new InputStreamReader((InputStream) request.getContent())); //Convert the input stream to a json element
    JsonObject rootobj = root.getAsJsonObject(); //May be an array, may be an object. 
    String zipcode = rootobj.get("zip_code").getAsString(); //just grab the zipcode