简而言之,这是我想在JAVA中解析的JSON对象的草图:
{
object1: {
item1: //[String | Array | Object] ,
item2: // ...
//<> more items
object2: { /* .. */ }
//<> more objects
}
这些是我为解析而创建的 POJO (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 确实
创建了我指定的类的对象,并且 不会 引发任何后续错误。
我知道这已经做过。那么,我想念什么?
TIA
那不可能 您需要修改您的JSON结构来表示object1
,object2
等作为的项目 阵列
。现在,它们是一个对象的属性,显然不清楚它们的数量(否则,您没有尝试将其映射为List
)。Gson很聪明,但没有 那么 聪明:)
因此,作为一个基本示例,此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
无效,因此只能将其替换为。
问题内容: 我一直在尝试将对象序列化为CSV,但是该对象包含,并且不能在对象上使用。 预期样本输出 : 实际输出 : 这是我的代码 :(其中大多数是2个POJO) 我尝试的一切似乎都没有任何效果,但找不到有效的解决方案。 抱歉,我无缘无故留下的毫无意义的注释,如果您回答了代码,请随时删除它们。 问题答案: 从错误中,我想相信这与您的模式有关,该模式的列取自on 而不是值。 您可能想在其中添加,但是
我需要一个自定义反序列化器来在复杂的POJO中转换字符串。反序列化工作直到使用反序列化器:特别是使用自定义反序列化器时,我的对象的非对象属性不会序列化。 我有一个restful Web服务,它有一个pojo作为参数。 所以我的类PreentivoWs需要一个方法。这里是类定义: 在jsonObject中,我有一个枚举定义为 但此对象需要转换反序列化程序: 并在财产上标注: fromString方法
我以前从未使用过JSON,我想序列化
根据这里描述的内容,我应该使用JSR-310表示而不是数字表示来序列化对象。但是,我得到了数字表示。可能有什么问题? 我是这样配置我正在使用的映射器的: 这是我得到的反序列化示例 对于以下事例类:
我有以下POJO,可以序列化为字节或。 当试图反序列化正文时,该错误似乎是从请求类生成的: 我怎样才能正确地反序列化地图?
奇怪的是下面的测试用例会失败。有人知道为什么吗?