maneira mais simples de ler json de uma URL em java

Essa pode ser uma pergunta idiota, mas qual é a maneira mais simples de ler e analisar o JSON a partir da URL em Java ?

No Groovy, é uma questão de poucas linhas de código. Os exemplos de Java que eu acho são ridiculamente longos (e têm um enorme bloco de manipulação de exceções).

Tudo o que quero fazer é ler o conteúdo deste link .

Usando o artefato Maven org.json:json Eu peguei o seguinte código, que acho bem curto. Não tão curto quanto possível, mas ainda utilizável.

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

Aqui estão algumas versões alternativas com o Jackson (já que existem mais de uma maneira pela qual você pode querer dados como):

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

E especificamente o caso usual (IMO) onde você quer lidar com objects Java, pode ser feito um forro:

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

Outras bibliotecas como o Gson também suportam methods de uma linha; por que muitos exemplos mostram que seções muito mais longas são ímpares. E o pior é que muitos exemplos usam bibliotecas org.json obsoletas; pode ter sido a primeira coisa ao redor, mas há meia dúzia de alternativas melhores, então há muito pouca razão para usá-la.

A maneira mais fácil: Use o gson, a biblioteca goto goto do google. https://code.google.com/p/google-gson/

Aqui está uma amostra. Eu estou indo para este site gratuito geolocator e analisando o json e exibindo meu CEP. (basta colocar essas coisas em um método principal para testá-lo)

  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 

Se você não se importar em usar algumas bibliotecas, isso pode ser feito em uma única linha.

Inclua as bibliotecas Apache Commons IOUtils e json.org .

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

Use o HttpClient para pegar o conteúdo da URL. E então use a biblioteca do json.org para analisar o JSON. Eu usei essas duas bibliotecas em muitos projetos e elas foram robustas e simples de usar.

Além disso, você pode tentar usar uma biblioteca Java da API do Facebook. Eu não tenho nenhuma experiência nesta área, mas há uma pergunta sobre estouro de pilha relacionada ao uso de uma API do Facebook em java . Você pode querer olhar para RestFB como uma boa opção para uma biblioteca usar.

Eu fiz o analisador json da maneira mais simples, aqui 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; } } 

essa class retorna o object json da url

e quando você quer o object json você acabou de chamar essa class e o método na sua class Activity

meu código está aqui

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

aqui a “chave json” é denotada que a chave no seu arquivo json

este é um simples exemplo de arquivo json

 { "json":"hi" } 

Aqui “json” é fundamental e “oi” é valor

Isto irá obter o seu valor json para o conteúdo da string.

É muito fácil, usando o jersey-client, basta include essa dependência do maven:

  org.glassfish.jersey.core jersey-client 2.25.1  

Em seguida, invoque-o usando este exemplo:

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

Em seguida, use o Gson do Google para analisar o JSON:

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

Não tenho certeza se isso é eficiente, mas essa é uma das maneiras possíveis:

Leia o json do url use url.openStream() e leia o conteúdo em uma string.

construa um object JSON com essa string (mais em json.org )

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