Obtener Json de la URL en Java

Haider Ali 12 octubre 2023
Obtener Json de la URL en Java

En esta guía, aprenderemos cómo obtener JSON de URL en Java. Las URL son API que contienen datos que puede convertir a JSON para su uso posterior. Suponemos que ya está familiarizado con los conceptos básicos de JSON en Java.

Obtener JSON de la URL en Java

Hay innumerables muestras de URL JSON disponibles en línea. Después de leer esta guía, también puede visitar aquí y probar cualquier URL JSON. Leeremos los datos almacenados en dichas API y los presentaremos en nuestro resultado en formato JSON. Por ejemplo, si abrimos esta URL de ejemplo (http://ip.jsontest.com/), abrirá una página web con la siguiente salida en formato JSON.

Ejemplo de JSON - 1

Del mismo modo, si tomamos esta URL de ejemplo (http://headers.jsontest.com/), el resultado sería el siguiente.

Ejemplo de JSON - 2

Ahora, veamos cómo podemos obtener el mismo formato JSON de la URL. Tomaremos los mismos dos ejemplos anteriores.

Ejemplo 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.
}

En el ejemplo de código anterior, dentro de la función principal, almacenamos una URL dentro de una cadena. Para leer datos de la URL, creamos un lector de objetos. Llamamos al método readJsonFromUrl y lo integramos con el lector de objetos. Veamos dónde ocurre la magia.

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

En la función anterior, el enlace se asigna a la entrada que iniciará el proceso de transmisión. Para leer el texto del flujo de entrada de caracteres, necesitamos almacenar los caracteres en búfer para una lectura eficiente. Obtenga más información sobre los búferes aquí. El ejemplo anterior se almacenará en búfer en formato UTF-8. Para leer datos de BufferReader, creamos otra función pública, Read.

Dentro de la función Read

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, simplemente estamos almacenando datos de URL dentro de una cadena usando el bucle do...while. Estamos leyendo carácter por carácter y almacenando cada uno de ellos dentro de temp. Usando el encasillado, tenemos todos los datos en caracteres dentro de str. Se devuelve str como una cadena almacenada dentro de Text en la función readJsonFromUrl. Creamos un JSON usando JSONObject y lo devolvemos.

Para ejecutar el programa anterior, necesitamos usar el siguiente comando.

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

El resultado de la URL de ejemplo (http://ip.jsontest.com/) es el siguiente.

java obtiene json de url - 1

java obtiene json de la 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