gpt4 book ai didi

java - 如何使用 Google 的 Gson API 正确反序列化 JSON?

转载 作者:IT老高 更新时间:2023-10-28 12:55:59 25 4
gpt4 key购买 nike

简而言之,这是我想用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) ;

每当我尝试访问可解析对象(例如,通过 ListIterator)时,都会得到 NullPointerException。然而,Gson 确实创建了一个我指定的类的对象,并且没有抛出任何后续错误。

我知道以前有人这样做过。那么,我错过了什么?

TIA

最佳答案

这是不可能的。您需要修改 JSON 结构以将 object1object2 等表示为 array 的项目。现在它们是一个对象的属性,显然不知道其中有多少(否则您没有尝试将其映射为 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,因为它是无效的。

关于java - 如何使用 Google 的 Gson API 正确反序列化 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2864370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com