read leer from java json url

from - leer json en java



La forma más sencilla de leer json desde una URL en java (8)

Esta podría ser una pregunta tonta, pero ¿cuál es la forma más sencilla de leer y analizar JSON desde una URL en Java ?

En Groovy, es una cuestión de pocas líneas de código. Los ejemplos de Java que encuentro son ridículamente largos (y tienen un gran bloque de manejo de excepciones).

Todo lo que quiero hacer es leer el contenido de este enlace .


Aquí hay un par de versiones alternativas con Jackson (ya que hay más de una forma en que puede querer datos):

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);

Y, específicamente, el caso habitual (IMO) en el que desea tratar con objetos Java, se puede hacer en una línea:

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

Otras librerías como Gson también soportan métodos de una línea; por qué muchos ejemplos muestran secciones mucho más largas es extraño. Y lo que es peor, es que muchos ejemplos utilizan una biblioteca org.json obsoleta; Puede que haya sido lo primero, pero hay media docena de alternativas mejores, así que hay muy pocas razones para usarlo.


Es muy fácil, usando jersey-client, solo incluya esta dependencia de maven:

<dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-client</artifactId> <version>2.25.1</version> </dependency>

Luego invoca usando este ejemplo:

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

Luego usa el Gson de Google para analizar el JSON:

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


He hecho el analizador json de la manera más simple, aquí está

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 String json = ""; // constructor public JSONParser() { } public JSONObject getJSONFromUrl(String 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); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "/n"); System.out.println(line); } is.close(); json = sb.toString(); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toString()); } // try parse the string to a JSON object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); System.out.println("error on parse data in jsonparser.java"); } // return JSON String return jObj; } }

esta clase devuelve el objeto json de la url

y cuando desee el objeto json, simplemente llame a esta clase y al método en su clase de actividad

mi código está aquí

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

aquí la "clave json" se denota que la clave en su archivo json

Este es un ejemplo simple de archivo json

{ "json":"hi" }

Aquí "json" es clave y "hi" es valor

Esto obtendrá su valor json para encadenar contenido.


La forma más fácil: usar gson, la propia biblioteca de goto json de google. https://code.google.com/p/google-gson/

Aquí hay una muestra. Voy a este sitio web gratuito de geolocalización para analizar el json y mostrar mi código postal. (solo pon esto en un método principal para probarlo)

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


No estoy seguro de si esto es eficiente, pero esta es una de las formas posibles:

Lea json de url, use url.openStream() y lea el contenido en una cadena.

construir un objeto JSON con esta cadena (más en json.org )

JSONObject(java.lang.String source) Construct a JSONObject from a source JSON text string.


Si no le importa usar un par de bibliotecas, puede hacerlo en una sola línea.

Incluye las bibliotecas Apache Commons IOUtils y json.org .

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


Usando el artefacto Maven org.json:json obtuve el siguiente código, que creo que es bastante corto. No lo más corto posible, pero aún así utilizable.

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")); } }


Utilice HttpClient para agarrar el contenido de la URL. Y luego use la biblioteca de json.org para analizar el JSON. He usado estas dos bibliotecas en muchos proyectos y han sido robustas y fáciles de usar.

Aparte de eso, puedes intentar usar una biblioteca java de la API de Facebook. No tengo ninguna experiencia en esta área, pero hay una pregunta sobre el desbordamiento de pila relacionada con el uso de una API de Facebook en java . Es posible que desee ver RestFB como una buena opción para que la utilice una biblioteca.