【发布时间】:2018-08-17 02:25:33
【问题描述】:
我对Java不是很好,所以请原谅我的无知。 我从一个表中选择并循环遍历结果集以创建一个列表,我可以使用该列表将其转换为 json,它应该类似于以下示例。
{
"ContactId": "123",
"key": {
"type": "email",
"email": "emailAdress"
},
"address": "String",
"source": "String",
"revoked": true,
"text": "String"
}
我不知道如何将它们放入列表中,因为我需要将不同的数据类型放入哈希映射中。 请注意,在上面的示例中,键是一个对象,我试图在列表中实现相同的目标。 最终目标是将生成的列表转换为 json。
我创建了一些哈希图,但我认为我的做法不正确。
String Table = "TableName";
String sql = String.format("SELECT id_user, email FROM %s ", Table);
ResultSet res = dbConn.prepareStatement(sql).executeQuery();
Map<String, Map> keyObject = new HashMap<String, Map>();
Map<String, String> keyMap = new HashMap<String, String>();
Map<String, String> mainMap = new HashMap<String, String>();
List<Map<String, String>> contacts = new ArrayList<>();
int i = 0;
while(res.next()){
keyMap.put("type", "email");
keyMap.put("value", res.getString("email"));
keyObject.put("key", keyMap);
mainMap.put("tenant", res.getString("id_user"));
mainMap.put("purpose", "Marketing sendouts");
mainMap.put("legalBase", "Withdrawn");
contacts.add(i, map);
i++;
}
System.out.println(contacts);
【问题讨论】:
-
为什么不使用所需的成员类型创建
Contact&Key类,然后使用从数据库中检索到的记录创建List<Contact>,并将其序列化为 JSON 格式?或者,根据您使用的库,您可以创建通用 JsonObject。 -
为什么不直接把数据放到
JsonObject呢? JsonObject 可以像你需要的那样放置("key",Object)。 -
快速浏览一下您的代码,我真的不认为地图是您应该使用的数据结构。例如,您确实了解每个键都是唯一的,当您执行
keyMap.put("value", res.getString("email"));时,您正在用键“值”替换先前注册的值,不是吗?这看起来像是一个典型的案例,即不创建自己的数据结构,而是采用已经存在的东西,尽管事实完全不适合。 -
这有点对象恐惧症的味道——简单地创建适当的类型并填充它们。通常,OO 语言中的列表映射列表表明您做错了......
-
@sakiM 不直接将其放入 JSON 对象的原因是我需要将列表分解为块或分区。我认为拥有列表会使数据分区变得容易。
标签: java arrays list arraylist hashmap