• 【实用】Java对象与JSON字符串的互转,实用操作!


    最近,工作中会涉及到Java对象与JSON字符串相互转换,虽然说并不难,但打算还是梳理一番,主要内容有:

    • JSON 字符串 转 普通对象
    • 普通对象 转 JSON 字符串
    • JSON 字符串数组 转 List 集合对象
    • List 集合对象 转 JSON 字符串数组
    • JSON 字符串 转 装有对象的 Map
    • 装有对象的Map 转 JSON 字符串

    开始之前,需要在 pom.xml 引入相关的 jar 包:

    1. <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    2. <dependency>
    3. <groupId>org.projectlombok</groupId>
    4. <artifactId>lombok</artifactId>
    5. <version>1.16.10</version>
    6. <scope>provided</scope>
    7. </dependency>
    8. <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    9. <dependency>
    10. <groupId>com.alibaba</groupId>
    11. <artifactId>fastjson</artifactId>
    12. <version>1.2.75</version>
    13. </dependency>

    接着,创建一个普通对象,使用 lombok 提供的注解:

    1. @Data
    2. public class ExtInfo {
    3. private String orderId;
    4. private String creatTime;
    5. private String postion;
    6. private String orderType;
    7. private String amount;
    8. }

    测试1:json字符串 与 普通对象 互转

    1. public class Demo {
    2. @Test
    3. void test1() {
    4. // json字符串转普通对象
    5. String jsonStr = "{\"orderId\":\"1111\",\"creatTime\":\"20210817223001\",\"postion\":\"hangZhou xiXi\",\"orderType\":\"4\",\"amount\":\"20\"}";
    6. JSONObject jsonObject = JSONObject.parseObject(jsonStr);
    7. ExtInfo extInfo = JSONObject.toJavaObject(jsonObject, ExtInfo.class);
    8. System.out.println(extInfo);
    9. System.out.println(extInfo.getOrderId());
    10. // 普通对象转json字符串
    11. String str = JSONObject.toJSONString(extInfo);
    12. System.out.println(str);
    13. }
    14. }

    测试结果:

    1. ExtInfo(orderId=1111, creatTime=20210817223001, postion=hangZhou xiXi, orderType=4, amount=20)
    2. 1111
    3. {"amount":"20","creatTime":"20210817223001","orderId":"1111","orderType":"4","postion":"hangZhou xiXi"}

    测试2:json字符串数组 与 List集合对象 互转

    1. public class Demo2 {
    2. @Test
    3. void test2() {
    4. // json字符串数组转对象List集合
    5. String jsonStrArray = "[{\"orderId\":\"1111\",\"creatTime\":\"20210817223001\",\"postion\":\"hangZhou xiXi\",\"orderType\":\"4\",\"amount\":\"20\"}]";
    6. JSONArray jsonArray = JSONObject.parseArray(jsonStrArray);
    7. // 方式一、根据索引获取 JSONArray 中的对象
    8. ExtInfo extInfo1 = jsonArray.getObject(0, ExtInfo.class);
    9. System.out.println(extInfo1);
    10. // 方式二、转成List,再从List获取对象
    11. List extInfos = jsonArray.toJavaList(ExtInfo.class);
    12. ExtInfo extInfo2 = extInfos.get(0);
    13. System.out.println(extInfo2);
    14. // List集合对象转json字符串数组
    15. String strs = JSONObject.toJSONString(extInfos);
    16. System.out.println(strs);
    17. }
    18. }

    测试结果:

    1. ExtInfo(orderId=1111, creatTime=20210817223001, postion=hangZhou xiXi, orderType=4, amount=20)
    2. ExtInfo(orderId=1111, creatTime=20210817223001, postion=hangZhou xiXi, orderType=4, amount=20)
    3. [{"amount":"20","creatTime":"20210817223001","orderId":"1111","orderType":"4","postion":"hangZhou xiXi"}]

    测试3:json字符串 与 装有对象的Map 互转

    1. public class Demo3 {
    2. @Test
    3. void test3() {
    4. // map格式转对象
    5. String mapJsonStr = "{\"level\":{\"orderId\":\"1111\",\"creatTime\":\"20210817223001\",\"postion\":\"hangZhou xiXi\",\"orderType\":\"4\",\"amount\":\"20\"}}";
    6. Map extInfoMap = JSONObject.parseObject(
    7. mapJsonStr,
    8. new TypeReference>() {});
    9. System.out.println(extInfoMap);
    10. System.out.println(extInfoMap.get("level"));
    11. // 对象转map格式
    12. String mapStr = JSONObject.toJSONString(extInfoMap);
    13. System.out.println(mapStr);
    14. }
    15. }

    测试结果:

    1. {level=ExtInfo(orderId=1111, creatTime=20210817223001, postion=hangZhou xiXi, orderType=4, amount=20)}
    2. ExtInfo(orderId=1111, creatTime=20210817223001, postion=hangZhou xiXi, orderType=4, amount=20)
    3. {"level":{"amount":"20","creatTime":"20210817223001","orderId":"1111","orderType":"4","postion":"hangZhou xiXi"}}
  • 相关阅读:
    C++入门(2)—函数重载、引用
    [gstreamer] overview of gstreamer
    Xcode15.3 -Library ‘iconv2.4.0‘ not found
    2022-10-31-基于用户的协同过滤推荐算法实现+MAE+RMSE的求解+项目代码+运行结果图
    ROS C++程序终止/结束进程&& 多线程终止运行程序
    GitOps 和 DevOps 有什么区别?
    Vue使用脚手架(ref、props、mixin、插件、scoped)(七)
    Numpy核心数据结构与DeepLearning常用操作
    客户分析中变量分类
    Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单
  • 原文地址:https://blog.csdn.net/qq_29119581/article/details/126415705