Convertir InputStream a JSONObject

4 minutos de lectura

Estoy convirtiendo InputStream a JSONObject usando el siguiente código. Mi pregunta es, ¿hay alguna forma sencilla de convertir InputStream a JSONObject? Sin hacer InputStream -> BufferedReader -> StringBuilder -> loop -> JSONObject.toString().

    InputStream inputStreamObject = PositionKeeperRequestTest.class.getResourceAsStream(jsonFileName);
    BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputStreamObject, "UTF-8"));
    StringBuilder responseStrBuilder = new StringBuilder();

    String inputStr;
    while ((inputStr = streamReader.readLine()) != null)
        responseStrBuilder.append(inputStr);

    JSONObject jsonObject = new JSONObject(responseStrBuilder.toString());

  • Lo que tienes está bien. Podrías extraer el BufferedReader leer a un método auxiliar estático y reutilizarlo. Algunas bibliotecas de terceros ya lo hacen.

    – Sotirios Delimanolis

    17/03/2014 a las 17:52


Como ya estás usando Google’s Json-Simple biblioteca, puede analizar el json desde un InputStream como esto:

InputStream inputStream = ... //Read from a file, or a HttpRequest, or whatever.
JSONParser jsonParser = new JSONParser();
JSONObject jsonObject = (JSONObject)jsonParser.parse(
      new InputStreamReader(inputStream, "UTF-8"));

  • no sé por qué, pero este código arroja una excepción: excepción en el subproceso “principal” java.lang.ClassCastException: la clase org.json.simple.JSONArray no se puede convertir a la clase org.json.JSONObject (org.json.simple.JSONArray y org .json.JSONObject están en el módulo sin nombre del cargador ‘aplicación’)

    – Vinci

    25 de febrero de 2019 a las 15:03

  • ¿Debería ser esto? JsonParser en vez de JSONParser?

    – klutt

    21 de febrero a las 7:12

use JsonReader para analizar InputStream. Ver ejemplo dentro de la API:
http://developer.android.com/reference/android/util/JsonReader.html

  • Esta debería ser la respuesta aceptada… el código en el enlace es simplemente: JsonReader reader = new JsonReader(new InputStreamReader(in, “UTF-8”));

    – JoelFan

    6 de mayo de 2016 a las 2:27

  • Es (casi) una respuesta de solo enlace. Estaría mucho mejor si incluyera la esencia en su respuesta.

    – Aleks G.

    7 de noviembre de 2016 a las 14:24

avatar de usuario
Arturo

Si no quiere meterse con las bibliotecas listas, puede crear una clase como esta.

public class JsonConverter {

//Your class here, or you can define it in the constructor
Class requestclass = PositionKeeperRequestTest.class;

//Filename
String jsonFileName;

//constructor
public myJson(String jsonFileName){
    this.jsonFileName = jsonFileName;
}


//Returns a json object from an input stream
private JSONObject getJsonObject(){

    //Create input stream
    InputStream inputStreamObject = getRequestclass().getResourceAsStream(jsonFileName);

   try {
       BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputStreamObject, "UTF-8"));
       StringBuilder responseStrBuilder = new StringBuilder();

       String inputStr;
       while ((inputStr = streamReader.readLine()) != null)
           responseStrBuilder.append(inputStr);

       JSONObject jsonObject = new JSONObject(responseStrBuilder.toString());

       //returns the json object
       return jsonObject;

   } catch (IOException e) {
       e.printStackTrace();
   } catch (JSONException e) {
       e.printStackTrace();
   }

    //if something went wrong, return null
    return null;
}

private Class getRequestclass(){
    return requestclass;
}
}

Entonces, puedes usarlo así:

JSONObject jObject = new JsonConverter(FILE_NAME).getJsonObject();

avatar de usuario
Tharindu Dhanushka

Este código funciona

BufferedReader bR = new BufferedReader(  new InputStreamReader(inputStream));
String line = "";

StringBuilder responseStrBuilder = new StringBuilder();
while((line =  bR.readLine()) != null){

    responseStrBuilder.append(line);
}
inputStream.close();

JSONObject result= new JSONObject(responseStrBuilder.toString());       

avatar de usuario
elhaj

Puedes usar esta API https://code.google.com/p/google-gson/

Es sencillo y muy útil,

Aquí se explica cómo usar el https://code.google.com/p/google-gson/ API para resolver tu problema

public class Test {
  public static void main(String... strings) throws FileNotFoundException  {
    Reader reader = new FileReader(new File("<fullPath>/json.js"));
    JsonElement elem = new JsonParser().parse(reader);
    Gson gson  = new GsonBuilder().create();
   TestObject o = gson.fromJson(elem, TestObject.class);
   System.out.println(o);
  }


}

class TestObject{
  public String fName;
  public String lName;
  public String toString() {
    return fName +" "+lName;
  }
}

Contenido del archivo json.js:

{"fName":"Mohamed",
"lName":"Ali"
}

  • Esto no responde la pregunta. Especifique cómo soluciona Gson su problema.

    – Sotirios Delimanolis

    17/03/2014 a las 18:05

  • Además, si la biblioteca que el interrogador ya está usando ofrece una solución, intente utilizar esa biblioteca con esa solución. Si no es así, exprese que no haga una respuesta que básicamente diga “usar otra biblioteca” y luego publique enlaces a la biblioteca. Las respuestas deben explicar los enlaces que tienen asociados, no solo ser volcados de enlaces.

    – cero298

    17/03/2014 a las 18:21

avatar de usuario
murales

Esto funcionó para mí:

JSONArray jsonarr = (JSONArray) new JSONParser().parse(new InputStreamReader(Nameofclass.class.getResourceAsStream(pathToJSONFile)));
JSONObject jsonobj = (JSONObject) new JSONParser().parse(new InputStreamReader(Nameofclass.class.getResourceAsStream(pathToJSONFile)));

  • Esto no responde la pregunta. Especifique cómo soluciona Gson su problema.

    – Sotirios Delimanolis

    17/03/2014 a las 18:05

  • Además, si la biblioteca que el interrogador ya está usando ofrece una solución, intente utilizar esa biblioteca con esa solución. Si no es así, exprese que no haga una respuesta que básicamente diga “usar otra biblioteca” y luego publique enlaces a la biblioteca. Las respuestas deben explicar los enlaces que tienen asociados, no solo ser volcados de enlaces.

    – cero298

    17/03/2014 a las 18:21

avatar de usuario
Surendra Kumar

Solución simple:

JsonElement element = new JsonParser().parse(new InputStreamReader(inputStream));
JSONObject jsonObject = new JSONObject(element.getAsJsonObject().toString());

  • JsonParser no está disponible

    – Gabor

    24 mayo 2018 a las 19:36

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad