如何将 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);