Построение POJO из строки JSON с динамическими полями с использованием Gson - PullRequest
1 голос
/ 26 октября 2011

Я использую веб-сервис в своем приложении, который возвращает список идентификаторов, связанных с именем.Пример может выглядеть следующим образом:

{
  "6502": "News",
  "6503": "Sports",
  "6505": "Opinion",
  "6501": "Arts",
  "6506": "The Statement"
}

Как мне создать POJO для десериализации Gson, когда все поля являются динамическими?

Ответы [ 2 ]

3 голосов
/ 26 октября 2011

Как насчет десериализации в карту?

Gson gson = new Gson();
Type mapType = new TypeToken<Map<String, String>>() {}.getType();
String json = "{'6502':'News','6503':'Sports','6505':'Opinion','6501':'Arts','6506':'The Statement'}";
Map<String, String> map = gson.fromJson(json, mapType);

Использование карты звучит для меня разумно (так как Java статически типизирована). Даже если это может сработать (возможно, используя JavaCompiler ) - доступ к объекту, вероятно, не будет сильно отличаться от доступа к карте.

2 голосов
/ 26 октября 2011

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

Возможно, вы сможете создавать классы во время выполнения, анализируя строку Json, но я не знаю, стоило ли это хлопот.

Если все динамично, лучше всего было бы десериализовать строку Json для отображения строк или массивов и т. Д., Как это делают другие библиотеки Json (я не знаю, может ли Gson сделать это тоже, но классы, которые вам нужны, обычно называется JSONObject и JSONArray).

Таким образом, приведенная выше строка Json приведет к Map<String, String>.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...