Intereting Posts
Анимация пользовательской обратной кнопки Получение списка запущенных процессов и уничтожение определенного процесса Новичкам для мобильных разработчиков (Android и iOS) необходимо руководствоваться Android: контакт Picker Intent | Невозможно создать экземпляр типа Uri Ошибка при использовании StatusBarManagerService – java.lang.SecurityException на android.permission.STATUS_BAR_SERVICE Как создать Json с помощью JsonArray и JsonObject PreferenceManager.setDefaultValues ​​readAgain параметр и новые настройки Удаление (Raw) контактов в Android 2.x Поддержка скорости воспроизведения с помощью ExoPlayer Новый пакет еще не зарегистрирован в системе. Ошибка на реальном телефоне Android NDK с графическим движком C ++ Отключить оттенок цвета в NavigationView только для указанных значков Загрузить значение из dimens.xml и сделать его отрицательным StaggaredGridLayoutManager не работает должным образом AlertDialog.Builder открыть еще один AlertDialog.Builder

Разбор json с вложенными массивами с Gson

Я новичок в разборе Gson и несколько простых анализов Gson. Но на этот раз мой JSON очень сложный. Мой JSON выглядит так:

{"uname":"man101", "uid":"2", "account":{ "entry":[8,15.48], "exit":[8,15.48], "details": [[0,0],[0,8.2],[1.15,8.2],[1.15,18.23],[7.33,18.23],[7.33,15.48],[12.15,2.28], [12.35,2.28],[12.35,0],[10.65,0],[10.65,1.42],[8.1,1.42],[8.1,3.95], [4.25,3.95],[4.25,0]], "section": [ { "account":[[0,0],[0,3.35], [4.25,3.35],[4.25,0]], "category":"office", "description":"Mobile based company", "sectionname":"xyz", "id":1 }, { "account":[[0,3.95],[0,7.8], [4.25,7.8],4.25,3.95]], "category":"office", "description":"Network based company", "sectionname":"ABC", "id":2 }, ] }, "category":"Cowork", "description":"Combined office space" } 

И я попытался разобрать это следующим образом

 public class AccountData { public String uname; public String uid; public String category; public String description; public Account account; public class Account { public float[] entry; public float[] exit; public List<float[]> details; public List<Section> section; } public class Section { public List<float[]> account; public String category; public String description; public String sectionname; public String id; } } 

И попытайтесь передать результат, подобный этому

  Gson gson = new Gson(); beaconList = gson.fromJson(result, AccountData.class); 

Он запускается без каких-либо ошибок, но когда я попытался получить доступ к некоторым данным, он дал нулевые значения.

Прежде всего, ваш JSON ошибочен, вот исправленная версия (обратите внимание, например, на дополнительную запятую в строке 9 вашего кода).

 { "uname": "man101", "uid": "2", "account": { "entry": [ 8, 15.48 ], "exit": [ 8, 15.48 ], "details": [ [ 0, 0 ], [ 0, 8.2 ], [ 1.15, 8.2 ], [ 1.15, 18.23 ], [ 7.33, 18.23 ], [ 7.33, 15.48 ], [ 12.15, 2.28 ], [ 12.35, 2.28 ], [ 12.35, 0 ], [ 10.65, 0 ], [ 10.65, 1.42 ], [ 8.1, 1.42 ], [ 8.1, 3.95 ], [ 4.25, 3.95 ], [ 4.25, 0 ] ], "section": [ { "account": [ [ 0, 0 ], [ 0, 3.35 ], [ 4.25, 3.35 ], [ 4.25, 0 ] ], "category": "office", "description": "Mobile based company", "sectionname": "xyz", "id": 1 }, { "account": [ [ 0, 3.95 ], [ 0, 7.8 ], [ 4.25, 7.8 ], [ 4.25, 3.95 ] ], "category": "office", "description": "Network based company", "sectionname": "ABC", "id": 2 } ] }, "category": "Cowork", "description": "Combined office space" } 

Вы можете проверить свой json с помощью http://json.parser.online.fr/ или http://www.bodurov.com/JsonFormatter/ .

Во-вторых , Gson так не любит внутренние классы, если они не объявлены статическими.

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

 public class AccountData { public String uname; public String uid; public String category; public String description; public Account account; public static class Account { public List<Double> entry; public List<Double> exit; public List<List<Double>> details; public List<Section> section; } public static class Section { public List<List<Double>> account; public String category; public String description; public String sectionname; public String id; } } 

Если вам не нравятся внутренние статические классы, вы всегда можете поместить Section и Account в отдельные файлы (без статического ключевого слова, конечно).

РЕДАКТИРОВАТЬ

Как отметил Брайан Роуч в комментариях, больше не нужно, чтобы внутренние классы были статичными, чтобы хорошо работать с Gson. Итак, точка 2 больше не верна, вы можете удалить статику из объявления классов.