Intereting Posts
Android-код для преобразования строки base64 в bitmap Xamarin Android: держите управление с помощью Alert Dialog, пока не нажмете кнопку Правильный способ обработки предупреждения NullPointerException от Android Studio SimpleCursorAdapter устарел в API версии 15? Пользовательский ViewPager, позволяющий дочернему элементу управления GoogleMap прокручивать по горизонтали Не найдено ни одной операции Launcher, запуск будет только синхронизировать пакет приложений на устройстве Преобразование изображений в видео XML в текстовом ресурсе Android? Есть ли способ принудительно подключиться к сети через 4G, даже если WiFi включен и подключен? Android в пожертвованиях приложений Android: в потерянных транзакциях App Purchase Как узнать, когда виджет галереи перестает прокручиваться? Android: два экземпляра медиа-рекордера одновременно Ссылка на класс 'Landroid / support / v4 / app / Watson; Failed – невозможно разрешить суперкласс Lcom / actionbarsherlock / app / SherlockActivity ReceiverRestrictedContext не может быть добавлен в android.app.Activity

Разбор 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 больше не верна, вы можете удалить статику из объявления классов.