如何将 JSON 值添加到 Java 中的 ArrayList
How to add JSON values to an ArrayList in Java
我有以下 JSON 文件:
{
"meta" : {
"stock" : "AWS",
"date modified" : 90
},
"roles" : [ "Member", "Admin" ],
"name" : "John Doe",
"admin" : true,
"email" : "john.doe@example.com"
}
我想读取键的值并将它们添加到数组列表中。
try {
// create object mapper instance
ObjectMapper mapper = new ObjectMapper();
// convert JSON file to map
Map<?, ?> map = mapper.readValue(Paths.get("user.json").toFile(), Map.class);
ArrayList<String> data = new ArrayList<String>();
// print map entries
for (Map.Entry<?, ?> entry : map.entrySet()) {
System.out.println((entry.getClass()) + " " + entry.getValue());
data.add((String)entry.getValue()); // trying to add entry values to arraylist
}
} catch (Exception ex) {
ex.printStackTrace();
}
我能够打印出值的数据类型以及值本身。所有值都是 class java.util.LinkedHashMap$Entry
的一部分。我无法将值转换为 String
以将它们添加到 ArrayList。我应该怎么做呢?谢谢
您的条目数据类型如下:
meta: Map<String:Object>
roles: List<String>
admin: Boolean
因此,当为每个条目值转换为字符串时,您将得到一个异常。
您应该处理不同的数据类型并根据您的要求进行转换:
Object value = entry.getValue();
我强烈建议您编写更多函数来检查 map/list/primitive 变量并将其转换为预期数据(字符串):
boolean isList(Object obj);
boolean isMap(Object obj);
...
public List<String> convertMap(Map<String,Object> map);
...
从 jackson-databind 文档中,您可以使用以下行将 json 转换为 Map<String, Object>
map(您有布尔值,列表, json) 中的数字和字符串值:
Map<String, Object> map = mapper.readValue(json, Map.class);
// it prints {meta={stock=AWS, date modified=90}, roles=[Member, Admin], name=John Doe, admin=true, email=john.doe@example.com}
System.out.println(map);
如果您想将 map 值字符串表示形式保存到 ArrayList
data 中,您可以使用循环:
List<String> data = new ArrayList<>();
for (Object value : map.values()) {
data.add(value.toString());
}
//it will print [{stock=AWS, date modified=90}, [Member, Admin], John Doe, true, john.doe@example.com]
System.out.println(data);
我有以下 JSON 文件:
{
"meta" : {
"stock" : "AWS",
"date modified" : 90
},
"roles" : [ "Member", "Admin" ],
"name" : "John Doe",
"admin" : true,
"email" : "john.doe@example.com"
}
我想读取键的值并将它们添加到数组列表中。
try {
// create object mapper instance
ObjectMapper mapper = new ObjectMapper();
// convert JSON file to map
Map<?, ?> map = mapper.readValue(Paths.get("user.json").toFile(), Map.class);
ArrayList<String> data = new ArrayList<String>();
// print map entries
for (Map.Entry<?, ?> entry : map.entrySet()) {
System.out.println((entry.getClass()) + " " + entry.getValue());
data.add((String)entry.getValue()); // trying to add entry values to arraylist
}
} catch (Exception ex) {
ex.printStackTrace();
}
我能够打印出值的数据类型以及值本身。所有值都是 class java.util.LinkedHashMap$Entry
的一部分。我无法将值转换为 String
以将它们添加到 ArrayList。我应该怎么做呢?谢谢
您的条目数据类型如下:
meta: Map<String:Object>
roles: List<String>
admin: Boolean
因此,当为每个条目值转换为字符串时,您将得到一个异常。 您应该处理不同的数据类型并根据您的要求进行转换:
Object value = entry.getValue();
我强烈建议您编写更多函数来检查 map/list/primitive 变量并将其转换为预期数据(字符串):
boolean isList(Object obj);
boolean isMap(Object obj);
...
public List<String> convertMap(Map<String,Object> map);
...
从 jackson-databind 文档中,您可以使用以下行将 json 转换为 Map<String, Object>
map(您有布尔值,列表, json) 中的数字和字符串值:
Map<String, Object> map = mapper.readValue(json, Map.class);
// it prints {meta={stock=AWS, date modified=90}, roles=[Member, Admin], name=John Doe, admin=true, email=john.doe@example.com}
System.out.println(map);
如果您想将 map 值字符串表示形式保存到 ArrayList
data 中,您可以使用循环:
List<String> data = new ArrayList<>();
for (Object value : map.values()) {
data.add(value.toString());
}
//it will print [{stock=AWS, date modified=90}, [Member, Admin], John Doe, true, john.doe@example.com]
System.out.println(data);