Obtenha Json do URL em Java

Haider Ali 15 fevereiro 2024
Obtenha Json do URL em Java

Neste guia, aprenderemos como obter JSON de URL em Java. Os URLs são APIs que contêm dados que você pode converter em JSON para uso posterior. Presumimos que você já esteja familiarizado com os conceitos básicos de JSON em Java.

Obter JSON de URL em Java

Existem incontáveis ​​exemplos de URL JSON disponíveis online. Depois de ler este guia, você também pode visitar aqui e testar qualquer URL JSON. Vamos ler os dados armazenados em tais APIs e apresentá-los em nossa saída no formato JSON. Por exemplo, se abrirmos este URL de exemplo (http://ip.jsontest.com/), ele abrirá uma página da web com a seguinte saída no formato JSON.

Exemplo JSON - 1

Da mesma forma, se pegarmos este URL de exemplo (http://headers.jsontest.com/), a saída seria a seguinte.

Exemplo JSON - 2

Agora, vamos ver como podemos obter o mesmo formato JSON do URL. Pegaremos os mesmos dois exemplos acima.

Exemplo de código:

import java.io.*;
import java.net.*;
import java.nio.charset.*;
import org.json.*;

public static void main(String[] args) throws IOException, JSONException {
  String url = "http://ip.jsontest.com/"; // example url which return json data
  ReadJson reader = new ReadJson(); // To ReadJson in order to read from url.
  JSONObject json = reader.readJsonFromUrl(url); // calling method in order to read.
  System.out.println(json.toString()); // simple for printing.
}

No exemplo de código acima, dentro da função principal, armazenamos um URL dentro de uma string. Para ler os dados da URL, criamos um leitor de objetos. Chamamos o método readJsonFromUrl e o integramos ao leitor de objetos. Vamos ver onde a mágica acontece.

Dentro de readJsonFromUrl

public JSONObject readJsonFromUrl(String link) throws IOException, JSONException {
  InputStream input = new URL(link).openStream();
  // Input Stream Object To Start Streaming.
  try { // try catch for checked exception
    BufferedReader re = new BufferedReader(new InputStreamReader(input, Charset.forName("UTF-8")));
    // Buffer Reading In UTF-8
    String Text = Read(re); // Handy Method To Read Data From BufferReader
    JSONObject json = new JSONObject(Text); // Creating A JSON
    return json; // Returning JSON
  } catch (Exception e) {
    return null;
  } finally {
    input.close();
  }
}

Na função acima, o link é atribuído à entrada que iniciará o processo de streaming. Para ler o texto do fluxo de entrada de caracteres, precisamos armazenar os caracteres para uma leitura eficiente. Saiba mais sobre Buffers aqui. O exemplo acima armazenará em buffer no formato UTF-8. Para ler os dados do BufferReader, criamos outra função pública, Read.

Dentro da função Ler

public String Read(Reader re) throws IOException { // class Declaration
  StringBuilder str = new StringBuilder(); // To Store Url Data In String.
  int temp;
  do {
    temp = re.read(); // reading Charcter By Chracter.
    str.append((char) temp);

  } while (temp != -1);
  //  re.read() return -1 when there is end of buffer , data or end of file.

  return str.toString();
}

Dentro de Read, estamos simplesmente armazenando dados de URL dentro de uma string usando o loop do...while. Estamos lendo caractere por caractere e armazenando cada um deles dentro de temp. Usando typecasting, temos todos os dados em caracteres dentro de str. str como uma string armazenada dentro de Text na função readJsonFromUrl é retornado. Criamos um JSON usando JSONObject e o retornamos.

Para executar o programa acima, precisamos usar o seguinte comando.

javac -cp 'org.json.jar' ReadJson.java
java -cp 'org.json.jar' ReadJson.java

A saída para o URL de exemplo (http://ip.jsontest.com/) é a seguinte.

java obter json do url - 1

java obter json do url - 2

Autor: Haider Ali
Haider Ali avatar Haider Ali avatar

Haider specializes in technical writing. He has a solid background in computer science that allows him to create engaging, original, and compelling technical tutorials. In his free time, he enjoys adding new skills to his repertoire and watching Netflix.

LinkedIn