使用Jackson将JSON字符串转换为Java对象

13

这可能是那种标题就能说明一切的问题。

我对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);

我想知道在Jackson中是否有一种方法,可以实现以下功能:

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

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

我只想删掉中间的这个人,也就是这个文件。

这可行吗?在Jackson的限制范围内是否存在这样的方法?


2
请阅读javadoc... - Sotirios Delimanolis
展示你的学生类。 - jeremyjjbrown
1
ObjectMapper#readValue(String, Class) 存在。 你错过了吗? - Matt Ball
@MattBall 哦,天哪,确实可以。我太蠢了。无论如何还是谢谢你,朋友。 - ViRALiC
2个回答

20

试一试这个:

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

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

1
构建ObjectMapper相对较昂贵;我不建议每次调用方法时都这样做。 - Matt Ball
是的,当我看到失败的原因是 OP 没有将字符串放在 "" 中时,我就解决了这个问题。 - Dan Ciborowski - MSFT
1
我是个彻头彻尾的白痴,问了这个问题感到很尴尬。非常感谢你们帮我解决了这个问题。 - ViRALiC
谢谢@djc391,我会的。非常感谢你们两个没有让我觉得这是一个愚蠢的问题。 - ViRALiC
我有一个JSON,其中包含内部数组和内部数组。考虑到每个数组都有一个对象。在这种情况下,如何将具有内部数组的JSON映射到POJO Java对象。 - Ravi

4

你可以编写一个帮助类,而不是在每个 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;
        }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接