JSON字符串,JSON对象的相互转换

此处介绍几种JSON转换的几种方法:使用Gson ObjectMapper 

Gson

此为Google提供的一个转换工具

添加依赖:

<!--             使用谷歌的Gson转换依赖-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
        </dependency>

通过创建Gson对象进行调用方法转换

   User1 user1 = new User1();
        user1.setId(1L);
        user1.setAge("18");
        user1.setName("王大陆");
        System.out.println("正常输出"+user1);
        Gson gson = new Gson();
        String s = gson.toJson(user1);
        System.out.println("gson转换"+s);
        //得到结果:gson转换{"Id":1,"Name":"王大陆","age":"18"}

ObjectMapper

添加依赖:

<!--            ObjectMapper依赖-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

通过创建ObjectMapper进行Json的转换

基本上就是两种方法:

1.对象转换Json字符串:   writeValueAsString(Object obj);

将对象,List集合,Map集合转换成Json

2.Json字符串转换成对象: readValue(String json,Class clazz);

这个方法也不难,从json到简单POJO  或者 到 Map ,数组都没有问题;

 比如:readValue(json,Person.class);readValue(json,Map.class);readValue(json,Person[].class)

只是要注意json到list的转换有点特别的就可以

readValue(json,List.class); 该返回类型是:List<LinkedHashMap<String ,Object>>

所以,并不能通过readValue(json,List.class);来直接过得List<Person>

如果想得到,就要使用JavaType这个类了。
 

 @Test
    public void look() throws JsonProcessingException {
 //-------------------------------1.对象转Json-----------------------------------
        User1 user1 = new User1();
        user1.setId(1L);
        user1.setAge("18");
        user1.setName("王大陆");

        //使用ObjectMapper进行转换
        ObjectMapper objectMapper = new ObjectMapper();
        //转换对象
        String s1 = objectMapper.writeValueAsString(user1);
        System.out.println("ObjectMapper转换"+s1);
        //得到结果:ObjectMapper转换{"age":"18","name":"王大陆","id":1}


        //转换list集合
        List<User1> list1 = new ArrayList<>();
        list1.add(new User1(1L,"lll","sss"));
        list1.add(new User1(2L,"llls","sssl"));
        String s2 = objectMapper.writeValueAsString(list1);
        System.out.println("list集合转换"+s2);
        //得到结果:
        // list集合转换[{"age":"sss","name":"lll","id":1},{"age":"sssl","name":"llls","id":2}]


        //转换Map
        HashMap map = new HashMap();
        map.put("name","张三");
        map.put("age",19);
        String s3 = objectMapper.writeValueAsString(map);
        System.out.println("map集合进行转换"+s3);
        //得到结果:map集合进行转换{"name":"张三","age":19}


  //-------------------------------2.Json转对象-----------------------------------
        //2.1Json转换为对象
        User1 user2 = new User1(1L,"王大陆","19");
        String s4 = objectMapper.writeValueAsString(user2);//得到一个Json值

        User1 user11 = objectMapper.readValue(s4, User1.class);
        System.out.println("Json转对象"+user11);
        //得到结果:Json转对象User1(Id=1, Name=王大陆, age=19)

        //2.2Json转换为Map
        Map map1 = objectMapper.readValue(s4, Map.class);
        System.out.println("Json转换成Map"+map1);
        //得到结果:Json转换成Map{age=19, id=1, name=王大陆}


        //2.3Json转换成List集合
        User1 user3 = new User1(1L,"王大陆","19");
        User1 user4 = new User1(2L,"王小陆","18");
        List<User1> l = new ArrayList<>();
        l.add(user3);
        l.add(user4);
        String s5 = objectMapper.writeValueAsString(l);

        List list = objectMapper.readValue(s5, List.class);
        System.out.println("Json转换成list"+list);
        //得到结果:Json转换成list[{age=19, name=王大陆, id=1}, {age=18, name=王小陆, id=2}]
        System.out.println(list.get(0));//只能得到下标的整体对象参数,不能得到具体的

        //使用此方法讲要转换的类型设置为所需要的对象类型,就是list的构造器参数类型设置为:User1
        JavaType javaType = objectMapper.getTypeFactory().constructParametricType(List.class, User1.class);
        List<User1> o = objectMapper.readValue(s5, javaType);
        System.out.println(o.get(0).getName());//结果为:王大陆

    }

当string类型的数字 进行转换时 要进行判断是否为null,如果为空则转换成0

 Double zyyPrice = Double.parseDouble(billingDetails.getAccountZyy() == null ? "0" : billingDetails.getAccountZyy());

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值