Короче говоря, это эскиз объекта JSON Я хочу разобрать в JAVA:Как использовать Gson API Google для десериализации JSON правильно?
{
object1: {
item1: //[String | Array | Object] ,
item2: // ...
//<> more items
object2: { /* .. */ }
//<> more objects
}
Таковы POJO s я создал для разбора (я оставлю вне import
заявления для краткости):
(1) представление полного объекта JSON
public class JObjectContainer {
private List<JObject> jObjects ;
public JObjectContainer() { }
//get & set methods
}
(2) представление вложенных объектов:
public class JObject {
private String id ;
private List<JNode> jObjects ;
public JObject() { }
//get & set methods
}
(3) Представление элементов:
public class JNode {
private JsonElement item1 ;
private JsonElement item2 ;
//<> more item fields
public JNode() { }
//get & set methods
}
Теперь, создавая экземпляр Gson (FileReader
для импорта jsonFile
),
Gson gson = new Gson() ;
JObjectContainer joc = gson.fromJson(jsonFile,JObjectContainer.class) ;
Я получаю NullPointerException
всякий раз, когда я пытаюсь для доступа к анализируемому объекту (например, через ListIterator
). Gson делает, однако создайте объект указанного класса I, и не делает сбрасывать любые последующие ошибки.
Я знаю, что это было сделано раньше. Итак, что мне не хватает?
TIA
Привет, спасибо за ваш ответ! Я намеревался поддерживать строки идентификатора (например, «Object1»), чтобы иметь возможность правильно анализировать класс Container для его содержимого, как и в JavaScript. Вы знаете, как это сделать? – FK82
Если эти строки идентификатора привязаны к каждому элементу ('Node'), а не к контейнеру (' nodes'), тогда вам нужно сделать его свойством 'Node'. Объекты JS с неизвестным количеством свойств и неизвестными именами свойств просто не являются хорошей идеей/практикой. Вам нужно поместить их в массив и дать массиву фиксированное имя. – BalusC
Этот вид превосходит цель использования JSON в целом. Если я не могу отразить стиль отображения объектов JSON в JAVA, я мог бы написать собственный API. ;-) Я в основном пытаюсь сделать то же самое, что и в этом example while somehow retaining the identifier strings. – FK82