read parse leer from example java json url

parse - request json java



Analizando JSON desde URL (8)

¿Hay alguna forma más simple de analizar JSON desde una URL? Utilicé a Gson. No puedo encontrar ejemplos útiles.


  1. Primero necesita descargar la URL (como texto):

    private static String readUrl(String urlString) throws Exception { BufferedReader reader = null; try { URL url = new URL(urlString); reader = new BufferedReader(new InputStreamReader(url.openStream())); StringBuffer buffer = new StringBuffer(); int read; char[] chars = new char[1024]; while ((read = reader.read(chars)) != -1) buffer.append(chars, 0, read); return buffer.toString(); } finally { if (reader != null) reader.close(); } }

  2. Entonces necesitas analizarlo (y aquí tienes algunas opciones).

    • GSON (ejemplo completo):

      static class Item { String title; String link; String description; } static class Page { String title; String link; String description; String language; List<Item> items; } public static void main(String[] args) throws Exception { String json = readUrl("http://www.javascriptkit.com/" + "dhtmltutors/javascriptkit.json"); Gson gson = new Gson(); Page page = gson.fromJson(json, Page.class); System.out.println(page.title); for (Item item : page.items) System.out.println(" " + item.title); }

      Productos:

      javascriptkit.com Document Text Resizer JavaScript Reference- Keyboard/ Mouse Buttons Events Dynamically loading an external JavaScript or CSS file

    • Pruebe la API de java desde json.org :

      try { JSONObject json = new JSONObject(readUrl("...")); String title = (String) json.get("title"); ... } catch (JSONException e) { e.printStackTrace(); }


Aquí hay un método fácil.

Primero analiza el JSON desde la URL -

public String readJSONFeed(String URL) { StringBuilder stringBuilder = new StringBuilder(); HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet(URL); try { HttpResponse response = httpClient.execute(httpGet); StatusLine statusLine = response.getStatusLine(); int statusCode = statusLine.getStatusCode(); if (statusCode == 200) { HttpEntity entity = response.getEntity(); InputStream inputStream = entity.getContent(); BufferedReader reader = new BufferedReader( new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) { stringBuilder.append(line); } inputStream.close(); } else { Log.d("JSON", "Failed to download file"); } } catch (Exception e) { Log.d("readJSONFeed", e.getLocalizedMessage()); } return stringBuilder.toString(); }

A continuación, coloque una tarea y luego lea el valor deseado de JSON -

private class ReadPlacesFeedTask extends AsyncTask<String, Void, String> { protected String doInBackground(String... urls) { return readJSONFeed(urls[0]); } protected void onPostExecute(String result) { JSONObject json; try { json = new JSONObject(result); ////CREATE A JSON OBJECT//// JSONObject data = json.getJSONObject("JSON OBJECT NAME"); ////GET A STRING//// String title = data.getString(""); //Similarly you can get other types of data //Replace String to the desired data type like int or boolean etc. } catch (JSONException e1) { e1.printStackTrace(); } //GETTINGS DATA FROM JSON ARRAY// try { JSONObject jsonObject = new JSONObject(result); JSONArray postalCodesItems = new JSONArray( jsonObject.getString("postalCodes")); JSONObject postalCodesItem = postalCodesItems .getJSONObject(1); } catch (Exception e) { Log.d("ReadPlacesFeedTask", e.getLocalizedMessage()); } } }

A continuación, puede realizar una tarea como esta:

new ReadPlacesFeedTask() .execute("JSON URL");


Puede usar org.apache.commons.io.IOUtils para descargar y org.json.JSONTokener para analizar:

JSONObject jo = (JSONObject) new JSONTokener(IOUtils.toString(new URL("http://gdata.youtube.com/feeds/api/videos/SIFL9qfmu5U?alt=json"))).nextValue(); System.out.println(jo.getString("version"));


Una solución alternativa simple:

  • Pegue la URL en un convertidor json a csv

  • Abra el archivo CSV en Excel u Open Office

  • Usa las herramientas de la hoja de cálculo para analizar los datos


Yo uso java 1.8 con com.fasterxml.jackson.databind.ObjectMapper

ObjectMapper mapper = new ObjectMapper(); Integer value = mapper.readValue(new URL("your url here"), Integer.class);

Integer.class puede ser también un tipo complejo. Solo por ejemplo usado.


GSON tiene un generador que toma un objeto Reader : de Json (Reader json, Class classOfT) .

Esto significa que puede crear un Reader a partir de una URL y luego pasarlo a Gson para consumir la secuencia y realizar la deserialización.

Solo tres líneas de código relevante.

import java.io.InputStreamReader; import java.net.URL; import java.util.Map; import com.google.gson.Gson; public class GsonFetchNetworkJson { public static void main(String[] ignored) throws Exception { URL url = new URL("https://httpbin.org/get?color=red&shape=oval"); InputStreamReader reader = new InputStreamReader(url.openStream()); MyDto dto = new Gson().fromJson(reader, MyDto.class); // using the deserialized object System.out.println(dto.headers); System.out.println(dto.args); System.out.println(dto.origin); System.out.println(dto.url); } private class MyDto { Map<String, String> headers; Map<String, String> args; String origin; String url; } }


import org.apache.commons.httpclient.util.URIUtil; import org.apache.commons.io.FileUtils; import groovy.json.JsonSlurper; import java.io.File; tmpDir = "/defineYourTmpDir" URL url = new URL("http://yourOwnURL.com/file.json"); String path = tmpDir + "/tmpRemoteJson" + ".json"; remoteJsonFile = new File(path); remoteJsonFile.deleteOnExit(); FileUtils.copyURLToFile(url, remoteJsonFile); String fileTMPPath = remoteJsonFile.getPath(); def inputTMPFile = new File(fileTMPPath); remoteParsedJson = new JsonSlurper().parseText(inputTMPFile.text);


public static TargetClassJson downloadPaletteJson(String url) throws IOException { if (StringUtils.isBlank(url)) { return null; } String genreJson = IOUtils.toString(new URL(url).openStream()); return new Gson().fromJson(genreJson, TargetClassJson.class); }