Подтвердить что ты не робот

Разбор GSON без большого количества классов

У меня есть следующий JSON, и меня интересуют только элементы "status", "lat" и "lng".

Используя Gson, можно ли разобрать этот JSON для получения этих значений без создания всей структуры классов, представляющей контент JSON?

JSON:

{
  "result": {
    "geometry": {
      "location": {
        "lat": 45.80355369999999,
        "lng": 15.9363229
      }
    }
  },
  "status": "OK"
}
4b9b3361

Ответ 1

Вам не нужно определять какие-либо новые классы, вы можете просто использовать объекты JSON, которые поставляются с библиотекой Gson. Вот простой пример:

JsonParser parser = new JsonParser();
JsonObject rootObj = parser.parse(json).getAsJsonObject();
JsonObject locObj = rootObj.getAsJsonObject("result")
    .getAsJsonObject("geometry").getAsJsonObject("location");

String status = rootObj.get("status").getAsString();
String lat = locObj.get("lat").getAsString();
String lng = locObj.get("lng").getAsString();

System.out.printf("Status: %s, Latitude: %s, Longitude: %s\n", status,
        lat, lng);

Обычный и простой. Если вы снова и снова повторяете один и тот же код, вы можете создавать классы, чтобы упростить отображение и устранить повторение.

Ответ 2

Это действительно возможно, но вам нужно создать настраиваемый десериализатор. См. Документацию Gson здесь и Gson API Javadoc здесь для получения дополнительной информации. А также взгляните на другие мои покрова здесь и здесь... и если у вас все еще есть сомнения, прокомментируйте.

Тем не менее, на мой взгляд, вам намного проще разобрать его, создавая соответствующие классы, тем более принимая во внимание простоту вашего ответа JSON... При обычном подходе вам нужно написать только супер-простой классы, однако, написание пользовательского десериализатора, хотя это и не так сложно, это займет у вас, вероятно, больше времени, и его будет сложнее адаптировать, если позже вам понадобятся данные другого вашего JSON...

У Gson есть способ работы, который был разработан для разработчиков, чтобы использовать его, а не для поиска обходных решений!

В любом случае, почему вы не хотите использовать классы? Если вам не нравится иметь много классов в вашем проекте, вы можете просто использовать вложенные классы, и ваш проект будет выглядеть более чистым...