JSON 字符串到具有 Jackson 的 Java 对象

2022-09-04 08:30:38

这可能是标题说出一切的问题之一。

我对ObjectMapper的方法非常着迷,该方法可以在Jackson库中找到,该库从文件中读取JSON字符串并将其分配给对象。readValue(file, class)

我很好奇这是否可以通过简单地从字符串中获取JSON并将其应用于对象来做到这一点。

某种替代方法,它采用字符串而不是文件,并将其分配给对象?readValue()

例如,虽然默认方法如下所示:readValue(file, class)

ObjectMapper mapper = new ObjectMapper();
Student student = mapper.readValue("C:\\student.json", Student.class);

我想知道杰克逊是否有某种方法,可以做到以下几点:

ObjectMapper mapper = new ObjectMapper();
Student student = mapper.readValue("{\"id\":100,\"firstName\":\"Adam\"}", Student.class);

第二个示例采用类的字符串和对象,而第一个示例采用类的文件和对象。

我只想剪掉中间人,在这种情况下,文件。

这是可行的,还是在杰克逊的约束下不存在这种方法?


答案 1

试试这个,

您无法像您所做的那样创建新字符串。

    String string = "{\"id\":100,\"firstName\":\"Adam\"}";
    Student student = mapper.readValue(string, Student.class);

答案 2

而不是处理每个错误,你可以写一个帮助器类,它有另一个方法。mapper.readValue(json,Class)Generic

和使用

String jsonString = "{\"id\":100,\"firstName\":\"Adam\"}";
Student student = JSONUtils.convertToObject(jsonString,Student.class);

我正在返回并幻想打印跟踪并在以后检查空值。您可以按照自己的方式处理错误情况。null

public class JSONUtils {
    public static String convertToJSON(Object object)
    {
        ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
        String json;
        try {
            json = ow.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            return convertToJSON(e);
        }
        return json;
    }


    public static <T> T convertToObject(Class<T> clazz,String jsonString)
    {
        try {
        ObjectMapper mapper = new ObjectMapper();
        return (T)mapper.readValue(jsonString, clazz);
        }catch(Exception e)
        {
            e.printStackTrace();
            return null;
        }
    }
}