moyen le plus simple de lire json depuis une URL en java

Cela peut être une question stupide, mais quelle est la manière la plus simple de lire et d’parsingr JSON à partir de l’ URL en Java ?

Dans Groovy, il ne s’agit que de quelques lignes de code. Les exemples Java que je trouve sont ridiculement longs (et ont un énorme bloc de gestion des exceptions).

Tout ce que je veux faire, c’est lire le contenu de ce lien .

En utilisant l’artefact Maven org.json:json J’ai le code suivant, ce qui est assez court je pense. Pas aussi court que possible, mais toujours utilisable.

 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 Ssortingng readAll(Reader rd) throws IOException { SsortingngBuilder sb = new SsortingngBuilder(); int cp; while ((cp = rd.read()) != -1) { sb.append((char) cp); } return sb.toSsortingng(); } public static JSONObject readJsonFromUrl(Ssortingng url) throws IOException, JSONException { InputStream is = new URL(url).openStream(); try { BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8"))); Ssortingng jsonText = readAll(rd); JSONObject json = new JSONObject(jsonText); return json; } finally { is.close(); } } public static void main(Ssortingng[] args) throws IOException, JSONException { JSONObject json = readJsonFromUrl("https://graph.facebook.com/19292868552"); System.out.println(json.toSsortingng()); System.out.println(json.get("id")); } } 

Voici quelques versions alternatives avec Jackson (car il y a plus d’une façon dont vous pourriez souhaiter des données):

  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 map = mapper.readValue(url, Map.class); 

Et plus précisément, le cas habituel (OMI) où vous voulez traiter des objects Java, peut être fait d’un seul trait:

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

D’autres bibliothèques comme Gson prennent également en charge les méthodes à une ligne; pourquoi de nombreux exemples montrent des sections beaucoup plus longues est étrange. Et pire encore, de nombreux exemples utilisent la bibliothèque obsolete org.json; c’était peut-être la première chose à faire, mais il y a une demi-douzaine de meilleures alternatives, donc il y a très peu de raisons de l’utiliser.

Le plus simple: utilisez gson, la bibliothèque goto json de google. https://code.google.com/p/google-gson/

Voici un échantillon. Je vais sur ce site Web gratuit de géolocalisateur et parsing le json et affiche mon code postal. (il suffit de mettre ces éléments dans une méthode principale pour les tester)

  Ssortingng sURL = "http://freegeoip.net/json/"; //just a ssortingng // 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. Ssortingng zipcode = rootobj.get("zip_code").getAsSsortingng(); //just grab the zipcode 

Si cela ne vous dérange pas d’utiliser quelques bibliothèques, cela peut se faire en une seule ligne.

Inclure les bibliothèques Apache Commons IOUtils & json.org .

 JSONObject json = new JSONObject(IOUtils.toSsortingng(new URL("https://graph.facebook.com/me"), Charset.forName("UTF-8"))); 

Utilisez HttpClient pour récupérer le contenu de l’URL. Et puis utilisez la bibliothèque de json.org pour parsingr le JSON. J’ai utilisé ces deux bibliothèques sur de nombreux projets et elles ont été robustes et simples à utiliser.

Autre que cela, vous pouvez essayer d’utiliser une bibliothèque Java API Facebook. Je n’ai aucune expérience dans ce domaine, mais il y a une question sur le débordement de stack liée à l’ utilisation d’une API Facebook en Java . Vous pouvez envisager RestFB comme un bon choix pour une bibliothèque à utiliser.

J’ai fait l’parsingur json de la manière la plus simple, la voici

 package com.inzane.shoapp.activity; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONException; import org.json.JSONObject; import android.util.Log; public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static Ssortingng json = ""; // constructor public JSONParser() { } public JSONObject getJSONFromUrl(Ssortingng url) { // Making HTTP request try { // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); SsortingngBuilder sb = new SsortingngBuilder(); Ssortingng line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); System.out.println(line); } is.close(); json = sb.toSsortingng(); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toSsortingng()); } // try parse the ssortingng to a JSON object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toSsortingng()); System.out.println("error on parse data in jsonparser.java"); } // return JSON Ssortingng return jObj; } } 

cette classe retourne l’object json de l’URL

et quand vous voulez l’object json, il vous suffit d’appeler cette classe et la méthode dans votre classe d’activité

mon code est ici

 Ssortingng url = "your url"; JSONParser jsonParser = new JSONParser(); JSONObject object = jsonParser.getJSONFromUrl(url); Ssortingng content=object.getSsortingng("json key"); 

ici la “clé json” est notée que la clé dans votre fichier json

c’est un exemple simple de fichier json

 { "json":"hi" } 

Ici “json” est la clé et “hi” est la valeur

Cela donnera votre valeur json au contenu de la chaîne.

C’est très facile, en utilisant jersey-client, il suffit d’inclure cette dépendance:

  org.glassfish.jersey.core jersey-client 2.25.1  

Ensuite, appelez-le en utilisant cet exemple:

 Ssortingng json = ClientBuilder.newClient().target("http://api.coindesk.com/v1/bpi/currentprice.json").request().accept(MediaType.APPLICATION_JSON).get(Ssortingng.class); 

Ensuite, utilisez Gson de Google pour parsingr le JSON:

 Gson gson = new Gson(); Type gm = new TypeToken() {}.getType(); CoinDeskMessage cdm = gson.fromJson(json, gm); 

Je ne suis pas sûr que ce soit efficace, mais c’est l’une des manières possibles:

Lisez json depuis l’URL utilisez url.openStream() et lisez le contenu dans une chaîne.

construire un object JSON avec cette chaîne (more at json.org )

 JSONObject(java.lang.Ssortingng source) Construct a JSONObject from a source JSON text ssortingng.