12

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

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

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

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

例如,虽然默认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);

第二个例子接受一个字符串和一个类的对象,而第一个例子接受一个文件和一个类的对象。

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

这是可行的还是在杰克逊的限制范围内不存在这样的方法?

4

2 回答 2

15

试试这个,

你不能像你那样创建一个新的字符串。

    String string = "{\"id\":100,\"firstName\":\"Adam\"}";
    Student student = mapper.readValue(string, Student.class);
于 2014-02-08T00:42:13.177 回答
3

mapper.readValue(json,Class)您可以编写一个具有另一种Generic方法的辅助类,而不是处理每个错误。

并使用

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

我正在返回null并希望稍后打印跟踪和检查 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;
        }
    }
}
于 2016-07-02T22:45:53.187 回答