gpt4 book ai didi

java - 使用 GSON 解析 JSON 文件

转载 作者:行者123 更新时间:2023-11-29 05:59:43 25 4
gpt4 key购买 nike

我在将 JSON 文件读入 POJO 时遇到问题。让我给你一段我的 JSON 文件包含的内容:

 {
"Speidy": {
"factionId": "2",
"role": "ADMIN",
"title": "",
"power": 9.692296666666667,
"powerBoost": 0.0,
"lastPowerUpdateTime": 1337023306922,
"lastLoginTime": 1337023306922,
"chatMode": "PUBLIC"
},
"ShadowSlayer272": {
"factionId": "2",
"role": "NORMAL",
"title": "",
"power": 0.8673466666666667,
"powerBoost": 0.0,
"lastPowerUpdateTime": 1336945426926,
"lastLoginTime": 1336945426926,
"chatMode": "PUBLIC"
},

我的问题是第一个“节点”是完全随机的,也就是说,如果每次都不同,我该如何为它制作一个 POJO 文件?

我的子数据的POJO文件是这样的:

public class Node {
private int factionId = 0;
private String role = "";
private String title = "";
private double power = 0.0;
private double powerBoost = 0.0;
private int lastPowerUpdateTime = 0;
private int lastLoginTime = 0;
private String chatMode = "";
}

然后我的另一个 POJO 文件是这样的:

public class Container {
private List<Node> nodes; //What should nodes be for GSON to get each random one?

public List<Node> getNodes() {
return nodes;
}
}

感谢所有帮助,谢谢。

更新

我尝试将 List 更改为 Map :

public class Container {
private Map<String,Node> nodes;

public Map<String,Node> getNodes() {
return nodes;
}

同时保持节点文件不变。该字符串将成为属性名称,即 SpeidyShadowSlayer272。然而,gson 从不对节点做任何事情,当我尝试 getNodes() 时,它返回一个 null 对象。

感谢您的帮助。

最佳答案

您将看似是名称的内容列为对象的属性名称,您可能打算将其表示为一个值。相反,将名称包含在 JSON 字符串中并为其分配一个属性名称,该名称实际上将作为私有(private)变量(带有 getter 和 setter)出现在您的 Java Node 类中。

有了这个,您应该能够将您的 JSON 反序列化回一个对象。此外,由于在服务器端您将 Node 集合表示为列表,因此我将 JSON 转换为包含两个对象的数组。在 JavaScript 中,您将以 node[0].namenode[1].name 的形式访问它们,这等同于 nodes.get(0) .getName() 在服务器端:

[
{
"name" : "Speidy",
"factionId": "2",
"role": "ADMIN",
"title": "",
"power": 9.692296666666667,
"powerBoost": 0.0,
"lastPowerUpdateTime": 1337023306922,
"lastLoginTime": 1337023306922,
"chatMode": "PUBLIC"
},
{
"name" : "ShadowSlayer272",
"factionId": "2",
"role": "NORMAL",
"title": "",
"power": 0.8673466666666667,
"powerBoost": 0.0,
"lastPowerUpdateTime": 1336945426926,
"lastLoginTime": 1336945426926,
"chatMode": "PUBLIC"
}
]

public class Node {
private String name = "";

private int factionId = 0;
private String role = "";
private String title = "";
private double power = 0.0;
private double powerBoost = 0.0;
private int lastPowerUpdateTime = 0;
private int lastLoginTime = 0;
private String chatMode = "";
}

话虽如此,如果您确实需要将名称用作属性名称,请考虑将 JSON 反序列化为 HashMap 而不是 List。列表通常映射到 JSON 数组,而映射通常更适合表示父对象内的多个 JSON 对象。

关于java - 使用 GSON 解析 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10668452/

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