简而言之,这是我想在JAVA中解析的JSON对象的草图:
{ object1: { item1: //[String | Array | Object] , item2: // ... //<> more items object2: { /* .. */ } //<> more objects }
这些是我为解析而创建的 POJO (import为简洁起见,我将省略这些语句):
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),
FileReader
jsonFile
Gson gson = new Gson() ; JObjectContainer joc = gson.fromJson(jsonFile,JObjectContainer.class) ;
NullPointerException每当我尝试访问可解析对象时(例如通过ListIterator),都会收到一个。但是,Gson 确实 创建了我指定的类的对象,并且 不会 引发任何后续错误。
NullPointerException
ListIterator
我知道这已经做过。那么,我想念什么?
TIA
那不可能 您需要修改您的JSON结构来表示object1,object2等作为的项目 阵列 。现在,它们是一个对象的属性,显然不清楚它们的数量(否则,您没有尝试将其映射为List)。Gson很聪明,但没有 那么 聪明:)
object1
object2
List
因此,作为一个基本示例,此JSON结构带有一个数组:
{ nodes: [ { item1: 'value1a', item2: 'value2a' }, { item1: 'value1b', item2: 'value2b' }, { item1: 'value1c', item2: 'value2c' } ] }
与Java表示形式(不一定称为POJO,而只是Javabean或模型对象或值对象)结合使用。
public class Container { private List<Node> nodes; // +getter. } public class Node { private String item1; private String item2; // +getters. }
和这个Gson的电话
Container container = new Gson().fromJson(json, Container.class);
应该管用。
更新 :显然,您的JSON结构是问题,而不是Java对象结构。假设您的Java对象结构正是您最终想要得到的,那么您的JSON结构应如下所示,以使Gson做好工作:
{ jObjects: [ { id: 123, jObjects: [ { item1: 'value1a', item2: 'value2a' }, { item1: 'value1b', item2: 'value2b' }, { item1: 'value1c', item2: 'value2c' } /* etc... commaseparated */ ] }, { id: 456, jObjects: [ { item1: 'value1d', item2: 'value2d' }, { item1: 'value1e', item2: 'value2e' }, { item1: 'value1f', item2: 'value2f' } /* etc... commaseparated */ ] } /* etc... commaseparated */ ] }
由于该JsonElement属性String无效,因此只能将其替换为。
JsonElement
String