to nie jest JSON tylko JSON string.
odczyta poprawnie wartości pól nawet jeśli nie definiuje ich wszystkich dostępnych w pliku json,
nie odczyta wartości pól bo ich nie zdefiniujesz.
Czy aby wyciągnąć te pola muszę zadeklarować klasy i pola,
niekoniecznie, możesz je wyciągnąc jako type : Object, lub string.
Możesz też skorzystać z jsonElement i pobrać swój plik jako JSON-ELEMENT, skonwertować do stringa i otrzymasz obiekt STRING w javie... z którego możesz pobrać dane. Wycinając lub jakoś konwertując
public class GsonExample3 {
public static void main(String[] args) {
// pretty print
Gson gson = new GsonBuilder().setPrettyPrinting().create();
try (Reader reader = new FileReader("c:\\projects\\staff.json")) {
// Convert JSON to JsonElement, and later to String
JsonElement json = gson.fromJson(reader, JsonElement.class);
String jsonInString = gson.toJson(json);
System.out.println(jsonInString);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Prościej będzie skonwertować to jako mape OBJECT wtedy łatwiej bedzie Ci się dobrać po KLUCZ -> WARTOŚĆ
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> mystuff = mapper.readValue( jsonString, Map.class );
String name = (String)mystuff.get("name");
String city = ((Map<String, Object>)mystuff.get( "address" )).get( "city" );