首页 > 其他分享 >Jackson解析JSON

Jackson解析JSON

时间:2023-08-14 23:33:48浏览次数:35  
标签:Jackson readValue JSON user println 解析 class objectMapper User

Jackson有三个核心包,分别是 Streaming、Databind、Annotations,通过这些包可以方便的对 JSON 进行操作
1.Streaming: 在jackson-core 模块。定义了一些流处理相关的 API 以及特定的 JSON 实现
2.Annotations: 在 jackson-annotations 模块,包含了 Jackson 中的注解
3.Databind: 在 jackson-databind 模块, 在Streaming 包的基础上实现了数据绑定,依赖于 Streaming 和 Annotations 包

ObjectMapper 对象映射器: 进行Java对象和 JSON 字符串之间快速转换
1.readValue() 方法可以进行 JSON 的反序列化操作,比如可以将字符串、文件流、字节流、字节数组等将常见的内容转换成 Java 对象
2.writeValue() 方法可以进行 JSON 的序列化操作,可以将 Java 对象转换成 JSON 字符串

1.字符串转换成对象(POJO): User user = objectMapper.readValue(str, User.class);
2.字符串转换成对象(POJO)作为泛型: ResultDTO data = objectMapper.readValue(dtoSerializationResult, new TypeReference<ResultDTO>() {});
3.字符串转换成List: JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, User.class);
List userList = objectMapper.readValue(jsonStr, javaType);
4.字符串转换成Map: Map<String, Object> employeeMap = objectMapper.readValue(expectedJson, new TypeReference() {});

JavaType
Map类型: mapper.getTypeFactory().constructParametricType(Map.class,String.class,Student.class);
第二个参数是Map的key,第三个参数是Map的value
List类型: personList = mapper.readValue(mapper.writeValueAsString(personList),mapper.getTypeFactory().constructParametricType(List.class,Person.class));

`public class JacksonTest2 {

private static ObjectMapper objectMapper = new ObjectMapper();

//序列化 Java对象转化为JSON
@Test
public void poJoToJsonString() throws JsonProcessingException {
    User user = new User();
    user.setId(1L);
    user.setName("ljc");
    user.setPwd("123");
    user.setAddr("内蒙古");
    user.setWebsiteUrl("http:www.baidu.com");
    user.setRegisterDate(new Date());
    user.setBirthDay(LocalDateTime.now());
    user.setSkillList(Arrays.asList("Java", "C++"));
    System.out.println(user.toString());
    String string = objectMapper.writeValueAsString(user);
    System.out.println(string);

}

// 反序列化 字符串转化为对象
@Test
public void jsonStringToPoJo() throws JsonProcessingException {
    String str = "{\"id\":1,\"name\":\"ljc\",\"pwd\":\"123\",\"addr\":\"内蒙古\",\"websiteUrl\":\"http:www.baidu.com\",\"registerDate\":\"2022-04-18 10:59:44\",\"birthDay\":\"2022-04-18 10:59:44\"}";
    User user = objectMapper.readValue(str, User.class);
    System.out.println(user);
}

// ResultDTO<T>
@Test
public void jsonStringToDTO() throws JsonProcessingException {
    User user = new User();
    user.setName("ljc");
    user.setWebsiteUrl("http:www.baidu.com");
    ResultDTO<User> userResultDTO = ResultDTO.buildSuccess(user);
    String dtoSerializationResult = objectMapper.writeValueAsString(userResultDTO);
    System.out.println("dtoSerializationResult:" + dtoSerializationResult);
    // 反序列化为ResultDTO<User>
    ResultDTO<User> data = objectMapper.readValue(dtoSerializationResult, new TypeReference<ResultDTO<User>>() {
    });
    System.out.println("data:"+data);
    System.out.println("user:"+data.getData());
}

// List
@Test
public void jsonStringToList() throws JsonProcessingException {
    String jsonStr = "["+
            "{\"id\":1,\"name\":\"ljc\",\"pwd\":\"123\",\"addr\":\"内蒙古\",\"websiteUrl\":\"http:www.baidu.com\"}" +
            ",{\"id\":2,\"name\":\"qsy\",\"pwd\":\"123\",\"addr\":\"吉林\",\"websiteUrl\":\"http:www.baidu.com\"}" +
             "]";
    // TypeReference<List<User>> typeReference = new TypeReference<List<User>>() {};
    List<User> personList = objectMapper.readValue(jsonStr, new TypeReference<List<User>>() {});
    for (User person : personList) {
        System.out.println(person);
    }

    // 第2种写法
    JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, User.class);
    List<User> userList = objectMapper.readValue(jsonStr, javaType);
    for (User person : userList) {
        System.out.println(person);
    }

}


@Test
public void jsonStringToMap() throws IOException {
    String expectedJson = "{\"name\":\"aLang\",\"age\":27,\"skillList\":[\"java\",\"c++\"]}";
    Map<String, Object> employeeMap = objectMapper.readValue(expectedJson, new TypeReference<Map>() {});
    System.out.println(employeeMap.getClass());
    for (Map.Entry<String, Object> entry : employeeMap.entrySet()) {
        System.out.println(entry.getKey() + ":" + entry.getValue());
    }
}

}`

标签:Jackson,readValue,JSON,user,println,解析,class,objectMapper,User
From: https://www.cnblogs.com/lijiachen/p/17630073.html

相关文章

  • 关于Vue的就地更新策略的解析
    在Vue中使用v-for渲染列表时,默认使用就地更新策略。该策略默认是基于索引的,规定在列表绑定的数据元素顺序变化时,不会重新创建整个列表,而只是更新对应DOM元素上的数据。以下代码实现了一个TODO列表的勾选、添加和删除功能:<!DOCTYPEhtml><html><head><title>In-PlaceUpd......
  • 2019考研英语(一)小作文真题解析与参考 Aiding Rural Primary Schools 答复信
    2019考研英语(一)小作文真题解析与参考Directions:Supposeyouareworkingforthe“AidingRuralPrimarySchools” projectofyouruniversity.Writeanemailtoanswertheinquiryfromaninternationalschoolvolunteer,specifyingthedetailsoftheproject.Yous......
  • JSON对象和字符串之间的相互转换
    比如我有两个变量,我要将a转换成字符串,将b转换成JSON对象:1vara={"name":"tom","sex":"男","age":"24"};23varb='{"name":"Mike","sex":"女","age":"29......
  • Step-by-step to LSTM: 解析LSTM神经网络设计原理
    Ps:喂喂喂,你萌不要光收藏不点赞呀_(:з」∠)_emmmm...搞清楚LSTM中的每个公式的每个细节为什么是这样子设计吗?想知道simpleRNN是如何一步步的走向了LSTM吗?觉得LSTM的工作机制看不透?恭喜你打开了正确的文章!零、前置知识1:在上一篇文章《前馈到反馈:解析RNN》中,小夕从最简单的无......
  • 【免费分享 图书】《阿里云天池大赛赛题解析——机器学习篇》-PDF电子书-百度云
    找这本书的资源简直要把我找吐了,各种网站压缩包一下下来就开始各种套路(比如要你充钱)为了防止还有我这样的受害者,这就把找到的PDF给大家分享一下。链接在文章最后如果这篇文章能够帮到您,麻烦帮我点个赞,并关注一下我,我有更多动力,持续分享更多有用图书给您!非常感谢,不胜感激!(点关......
  • json字符串转换对象或列表,多了字段不会报错
    json字符串转换对象或列表,多了字段不会报错//DEMO1转换对象应用riskIdpublicclassItem{privateStringid;privateStringrate;publicItem(Stringid,Stringrate){this.id=id;this.rate=rate;}@Overridepubl......
  • 高德解析城市的分析,根据高德的经纬度获取城市cityCode
    高德解析城市的分析,根据高德的经纬度获取城市cityCodehttp://restapi.amap.com/v3/geocode/regeo?output=json&location=110.517039,18.817948&key=替换成自己的高德KEY&extensions=base1.高德返回城市(正常情况)江苏省南京市玄武区"city":"南京市","province":"江苏省",&qu......
  • 深入解析Spring的IOC与AOP及其在项目中的应用
    推荐阅读「java、python面试题」来自UC网盘app分享,打开手机app,额外获得1T空间https://drive.uc.cn/s/2aeb6c2dcedd4AIGC资料包https://drive.uc.cn/s/6077fc42116d4https://pan.xunlei.com/s/VN_qC7kwpKFgKLto4KgP4Do_A1?pwd=7kbv#https://yv4kfv1n3j.feishu.cn/docx/MRyxdaq......
  • npm 更改package.json 中依赖包前缀
    ~会匹配最近的小版本依赖包,比如~1.2.3会匹配所有1.2.x版本,但是不包括1.3.0^会匹配最新的大版本依赖包,比如^1.2.3会匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0 *这意味着安装最新版本的依赖包 推荐使用~ npmconfigsetsave-prefix='~'......
  • 深入解析:HTTP和HTTPS的三次握手与四次挥手
    推荐阅读AI文本OCR识别最佳实践AIGamma一键生成PPT工具直达链接玩转cloudStudio在线编码神器玩转GPUAI绘画、AI讲话、翻译,GPU点亮AI想象空间「java、python面试题」来自UC网盘app分享,打开手机app,额外获得1T空间https://drive.uc.cn/s/2aeb6c2dcedd4AIGC资料包https:......