# JSON mit GSON nutzen



## Kavar (12. Apr 2018)

Hallo,

ich arbeite gerade an einem Projekt und versuche dabei eine JSON mit GSON zu verarbeiten.
Grundlegend klappt das auch, aber bei der JSON die ich jetzt verarbeiten muss geht es nicht weiter.

Die JSON kann hier eingesehen werden >>klick<<
Das Problem was ich habe ist, dass ich immer eine Fehlermeldung bekomme, dass es sich nicht um ein JSON Object handelt.
Ich vermute, dass es daran liegt, dass hier direkt mehrere Objekte angezeigt werden.


```
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

public class JsonReader{

    /**
     * @param args the command line arguments
     * @throws java.net.MalformedURLException
     */
    public static void main(String[] args) throws MalformedURLException, IOException {

        String sURL = "https://cve.circl.lu/api/search/axis/network_camera"; //just a string

        // Connect to the URL using java's native library
        URL url = new URL(sURL);
        HttpURLConnection request = (HttpURLConnection) url.openConnection();
        request.connect();
        Gson gson = new Gson();
        // 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. 

    }
}
```

Wie kann ich diese JSON parsen, sodass ich auf einzelne Elemente zugreifen kann?

Vielen Dank für eure Hilfe.


----------



## Thallius (12. Apr 2018)

Also das root Element ist ein JSON Array und kein Object.


```
JsonArray rootobj = root.getAsJsonArray();
```

sollte eigentlich funktionieren.

Schöner wäre es natürlich du erzeugst gleich eine generische Liste wie z.B. hier

https://stackoverflow.com/questions...alizing-an-array-of-objects-with-arrays-in-it

gezeigt

Gruß

Claus


----------



## Kavar (12. Apr 2018)

Super danke, das probiere ich dann gleich mal aus.


----------



## AmsananKING (25. Jul 2021)

Ich habe eine Frage wie kann ich aus diesem Code:
[CODE lang="java" title="Reader.class" highlight="9"]ArrayList<Vorwahl>list =new ArrayList<>();
        public ArrayList<Vorwahl> javaObjectsfromJson(){

            try {
                Gson gson=new Gson();
                InputStream fis = new FileInputStream("Tnummern.json");
                JsonReader reader =new JsonReader(new InputStreamReader(fis));

                Reader reader1 = Files.newBufferedReader(Paths.get("Tnummern.json"));

                JsonObject[] jsonarray =gson.fromJson(reader,JsonObject[].class);
               for(int i=0;i<jsonarray.length;i++){
                   Vorwahl vorwahl =gson.fromJson(jsonarray_,Vorwahl.class);
                   list.add(vorwahl);

               }
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            return list;
        }


    }[/CODE]
In einen Code umwandeln, sodass es auch in einer Jar funktoniert?
Weil der Reader mit Paths.get() funktoniert leider bei mir nicht._


----------



## kneitzel (25. Jul 2021)

Wenn die Datei in dem jar mit drin ist, dann kannst Du einen Stream bekommen mit getClass().getResourceAsStream("/Tnummern.json") und diesen Stream dann an gson.fromJson übergeben. (Oder falls der ein overload hat, das statt einem reader ein stream nimmt, dann erstellst Du erst noch ein InputStreamReader daraus.)

Den Pfad musst Du ggf. noch anpassen - das ist der Pfad im jar. Also wenn es da direkt im root ist, dann ist es / .. ist es erst noch in einem anderen Verzeichnis, dann wäre es halt /anderesVerzeichnis/Tnummern.json.


----------

