Konvertieren Sie InputStream in JSONObject

Lesezeit: 4 Minuten

Ich konvertiere InputStream mit folgendem Code in JSONObject. Meine Frage ist, gibt es eine einfache Möglichkeit, InputStream in JSONObject zu konvertieren. Ohne InputStream -> BufferedReader -> StringBuilder -> loop -> JSONObject.toString() zu tun.

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

  • Was du hast, ist in Ordnung. Sie könnten die extrahieren BufferedReader in eine statische Hilfsmethode lesen und diese wiederverwenden. Einige Bibliotheken von Drittanbietern tun dies bereits.

    – Sotirios Delimanolis

    17. März 2014 um 17:52 Uhr


Da Sie bereits die von Google verwenden Json-Simple Bibliothek können Sie den JSON aus einer analysieren InputStream so was:

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

  • weiß nicht warum, aber dieser Code löst eine Ausnahme aus: Ausnahme im Thread “main” java.lang.ClassCastException: class org.json.simple.JSONArray can not be cast to class org.json.JSONObject (org.json.simple.JSONArray and org .json.JSONObject befinden sich im unbenannten Modul des Loaders ‘app’)

    – Vinzi

    25. Februar 2019 um 15:03 Uhr

  • Sollte das sein JsonParser Anstatt von JSONParser?

    – klutt

    21. Februar um 7:12 Uhr

Verwenden Sie JsonReader, um den InputStream zu analysieren. Siehe Beispiel in der API:
http://developer.android.com/reference/android/util/JsonReader.html

  • Dies sollte die akzeptierte Antwort sein … der Code im Link lautet einfach: JsonReader reader = new JsonReader (new InputStreamReader (in, “UTF-8”));

    – JoelFan

    6. Mai 2016 um 2:27 Uhr

  • Es ist (fast) eine reine Link-Antwort. Sie wären viel besser dran, wenn Sie das Wesentliche in Ihre Antwort aufnehmen würden.

    – Alexander G

    7. November 2016 um 14:24 Uhr

Benutzer-Avatar
Arthur

Wenn Sie nicht mit fertigen Bibliotheken herumspielen wollen, können Sie einfach eine Klasse wie diese erstellen.

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

Dann können Sie es wie folgt verwenden:

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

Benutzer-Avatar
Tharindu Dhanuschka

Dieser Code funktioniert

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

Benutzer-Avatar
elhaj

Sie können diese API verwenden https://code.google.com/p/google-gson/

Es ist einfach und sehr nützlich,

Hier erfahren Sie, wie Sie die verwenden https://code.google.com/p/google-gson/ API, um Ihr Problem zu lösen

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

Inhalt der json.js-Datei:

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

  • Dies beantwortet die Frage nicht. Bitte geben Sie an, wie Gson das Problem behebt.

    – Sotirios Delimanolis

    17. März 2014 um 18:05 Uhr

  • Wenn die Bibliothek, die der Fragesteller bereits verwendet, eine Lösung bietet, versuchen Sie außerdem, diese Bibliothek mit dieser Lösung zu verwenden. Wenn dies nicht der Fall ist, drücken Sie aus, dass Sie keine Antwort geben, die im Grunde “Verwenden Sie eine andere Bibliothek” lautet, und posten Sie dann Links zu der Bibliothek. Antworten müssen die verknüpften Links erläutern und dürfen nicht nur Link-Dumps sein.

    – null298

    17. März 2014 um 18:21 Uhr

Benutzer-Avatar
Murali

Das hat bei mir funktioniert:

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

  • Dies beantwortet die Frage nicht. Bitte geben Sie an, wie Gson das Problem behebt.

    – Sotirios Delimanolis

    17. März 2014 um 18:05 Uhr

  • Wenn die Bibliothek, die der Fragesteller bereits verwendet, eine Lösung bietet, versuchen Sie außerdem, diese Bibliothek mit dieser Lösung zu verwenden. Wenn dies nicht der Fall ist, drücken Sie aus, dass Sie keine Antwort geben, die im Grunde “Verwenden Sie eine andere Bibliothek” lautet, und posten Sie dann Links zu der Bibliothek. Antworten müssen die verknüpften Links erläutern und dürfen nicht nur Link-Dumps sein.

    – null298

    17. März 2014 um 18:21 Uhr

Benutzer-Avatar
Surendra Kumar

Einfache Lösung:

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

  • JsonParser ist nicht verfügbar

    – Gabor

    24. Mai 2018 um 19:36 Uhr

1018660cookie-checkKonvertieren Sie InputStream in JSONObject

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy