java - 是否存在提供任意深度嵌套以转换为 JSON 对象的 Java 类?
问题描述
我怀疑一定有一些我忽略的 Java 类或库提供了我正在寻找的功能:
我的 Select Input 内容可能会变得非常大,我想分层显示它们以提高可读性(参见下面的示例)。嵌套可以实现任意深度。
Weapons
Swords
1-handed
Katanas
Bokin
2-handed
Zweihänder
Spears
Angon
Food
Meat
Fish
Angel
Pasta
...
我没有使用,OptGroup
因为我需要这些集合本身是可选择的。首先,我在网上搜索了一个 Java 树类的引用。没有找到任何东西,我在服务器端递归地将我的选项的数据收集到 HashMap 的 HashMap 的 HashMap 中,一直向下,然后调用new Gson().toJson(data)
. 在客户端,我通过在每个值上调用键来递归遍历它,填充文本以匹配深度。这工作了一段时间,直到我意识到我需要我的选项值与选项文本不同。现在我又不知所措了,因为该HashMap
系列看起来无法处理这个额外的维度。
我以前没有尝试过手动编写 JSON,但我认为我现在要发送的 JSON 可能看起来像这样:
{
'name' : 'Weapons',
'id' : 45,
{
'name' : 'Swords',
'id' : 32,
{
'name' : '1-handed',
'id' : 341,
{
'name' : 'Katanas',
'id' : 3
},
{
'name' : 'Bokin',
'id' : 9
}
}
}
}
减去现有的解决方案,我认为我的下一个计划是创建一个存储自己的选项数据的类以及该类的实例数组。在解决方案的深层次上,也许我可以学习如何正确格式化 JSON 并使用 StringBuilder 和递归来构造 JSON 对象。但是,对于这个问题,难道没有利用现成库的解决方案吗?
解决方案
你在正确的轨道上Map<String, Object>
,因为它可以嵌套任意深。
但是,您需要命名嵌套节点的列表,例如调用它children
,但您当然可以随意命名:
{
"name": "Weapons",
"id": 45,
"children": [{
"name": "Swords",
"id": 32,
"children": [{
"name": "1-handed",
"id": 341,
"children": [{
"name": "Katanas",
"id": 3
}, {
"name": "Bokin",
"id": 9
}]
}]
}]
}
但是在 Java 中,更好的方法是使用类型安全的对象,而不是普通的映射:
class Node {
private String name;
private int id;
private List<Node> children;
// constructor, getters and setters here
}
推荐阅读
- c - 数组编号更改为随机数
- python - Numpy检测列表中的递增范围
- sql - 同一行中的前 3 个值
- javascript - 在 ReactJS 中键入 1 个字符时,我的输入字段失去焦点
- android - 如何在我的“TextFormField”中添加错误消息,如 java 中的错误消息?
- scripting - 如何在文件夹中找到符合过滤条件的 DOORS 模块?
- tensorflow - 训练后使用 Tensorflow v2 调整神经网络最后一层的偏置项
- c# - 错误值不在使用 itextsharp 创建 pdf 的预期范围内
- java - 使用 && 运算符的长 if() 语句,还是单独的 if 语句?
- sql - SQL Server 不允许我使用刚刚创建的用户和登录