json工具 fastJson和jackson的简单使用

对json格式数据的操作与转换,是后端程序员的家常便饭,时代在进步,我们不可能还去用 json-lib 这些已被淘汰的工具。

掌握 fastJson和jackson 就显得格外重要!

本文只是利用 fastJson 和 jackson 工具对json进行转换,并不涉及它们更复杂的介绍。

 

准备:

先创建两个测试用的 pojo

package com.liqiye.springbootdemo.entity;

import com.liqiye.springbootdemo.utils.SetName;

/**
 * @author liqiye
 * @description
 * @date 2019/4/6
 */
public class User {

    public Integer id;
    public String name;
    public Integer age;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public User() {
    }

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

 

package com.liqiye.springbootdemo.entity;

import java.util.ArrayList;
import java.util.List;

/**
 * @author liqiye
 * @description 用户组
 * @date 2019/4/10
 */
public class UserGroup {
    private String name;
    private List<User> users = new ArrayList<User>();
    public UserGroup(){}
    public UserGroup(String name, List<User> users){
        this.name = name;
        this.users = users;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public List<User> getUsers() {
        return users;
    }
    public void setUsers(List<User> users) {
        this.users = users;
    }
    @Override
    public String toString() {
        return "UserGroup [name=" + name + ", users=" + users + "]";
    }
}

1. fastJson

引入maven 

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>

测试类,其实fastjson使用起来十分简单,无非就是一个 JSON 对象,几个方法  toJSONString 、 parseObject 、parseArray

复杂的json也就一层一层转换而已

package com.liqiye.springbootdemo.test;

import com.alibaba.fastjson.JSON;
import com.liqiye.springbootdemo.entity.User;
import com.liqiye.springbootdemo.entity.UserGroup;
import org.junit.Test;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author liqiye
 * @description 测试fastjson
 * @date 2019/4/10
 */
public class FastJsonTest {

    // java对象转json字符串
    @Test
    public void objectTOJson(){
        // 简单java类转json字符串
        User user = new User("liqiye", 23);
        String UserJson = JSON.toJSONString(user);
        System.out.println("简单java类转json字符串:"+UserJson);

        // List<Object>转json字符串
        User user1 = new User("张三", 23);
        User user2 = new User("李四", 24);
        List<User> users = new ArrayList<User>();
        users.add(user1);
        users.add(user2);
        String ListUserJson = JSON.toJSONString(users);
        System.out.println("List<Object>转json字符串:"+ListUserJson);

        //复杂java类转json字符串
        UserGroup userGroup = new UserGroup("用户组", users);
        String userGroupJson = JSON.toJSONString(userGroup);
        System.out.println("复杂java类转json字符串:"+userGroupJson);
    }

    // json格式字符串转java对象
    @Test
    public void JsonTOObject(){
        // json字符串转简单java对象
        String jsonStr1 = "{'name':'王五','age': 23}";
        User user = JSON.parseObject(jsonStr1, User.class);
        System.out.println("json字符串转简单java对象:"+user.toString());

        // json字符串转List<Object>对象
        String jsonStr2 = "[{'name':'张三','age':23},{'name':'李四','age':24}]";
        List<User> users = JSON.parseArray(jsonStr2, User.class);
        System.out.println("json字符串转List<Object>对象:"+users.toString());

        // json字符串转复杂java对象
        String jsonStr3 = "{'name':'用户组','users':[{'name':'张三','age':23},{'name':'李四','age':24}]}";
        UserGroup userGroup = JSON.parseObject(jsonStr3, UserGroup.class);
        System.out.println("json字符串转复杂java对象:"+userGroup);
    }

    // map转json字符串
    @Test
    public void mapToJson(){
        Map<String, User> map = new HashMap<String, User>();
        map.put("男生",new User("张三",23));
        map.put("女生",new User("李四",24));
        String mapJson = JSON.toJSONString(map);
        System.out.println("map转json字符串:"+mapJson);
    }

    // json字符串转map(复杂map,其实就是一层一层拆分,同样用的都只是JSON的toJSONString方法和parseObject方法)
    @Test
    public void jsonToMap(){
        String str = "{\"男生\":{\"age\":23,\"name\":\"张三\"},\"女生\":{\"age\":24,\"name\":\"李四\"}}";
        Map map = JSON.parseObject(str);
        for (Object obj : map.keySet()){
            System.out.println("map的key为:"+obj+"、值为:"+map.get(obj));
            //  map的每一个都是一个JSONObject对象,先将它转成json字符串
            String s = JSON.toJSONString(map.get(obj));
            // 再将json字符串转自定义对象
            User user = JSON.parseObject(s, User.class);
            System.out.println(user);
        }
    }

}

2.jackson

引入maven 

<dependency>
     <groupId>com.fasterxml.jackson.core</groupId>
     <artifactId>jackson-core</artifactId>
     <version>2.9.8</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.8</version>
</dependency>

测试类,jackson和fastjson一样很简单,new一个ObjectMapper,用方法 writeValueAsString 和 readValue 即可实现转换

package com.liqiye.springbootdemo.test;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.liqiye.springbootdemo.entity.User;
import org.junit.Test;

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author liqiye
 * @description 测试Jackson
 * @date 2019/4/10
 */
public class JacksonTest {

    // json字符串和java对象、字节流、文件 之间的转换
    @Test
    public void test1() throws IOException {
        ObjectMapper mapper = new ObjectMapper(); // jackson的核心类
        User user = new User("张三", 23);
        // java对象转json字符串
        String text = mapper.writeValueAsString(user);
        System.out.println("java对象转json字符串:"+text);
        // json字符串转java对象
        String str = "{\"id\":null,\"name\":\"李四\",\"age\":24}";
        User user1 = mapper.readValue(text, User.class);
        System.out.println("json字符串转java对象:"+user1);
        // java对象转为json文件,(在根目录生成)
        mapper.writeValue(new File("user.json"), user);
        // java对象转为字节流
        byte[] bytes = mapper.writeValueAsBytes(user);
        // 字节流转java对象
        User user2 = new User();
        user2 = mapper.readValue(bytes, User.class);
        System.out.println("字节流转java对象"+user2);
        // json文件转java对象
        User user3 = new User();
        user3 = mapper.readValue(new File("user.json"), User.class);
        System.out.println("json文件转java对象"+user3);
    }

    // json字符串与map之间的相互转化
    @Test
    public void test2() throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        // map转json字符串
        Map<String, User> map = new HashMap<>();
        map.put("男生", new User("张三",23));
        map.put("女生", new User("李四",24));
        String text = mapper.writeValueAsString(map);
        System.out.println("map转json字符串:"+text);
        // json字符串转map
        String str = "{\"男生\":{\"id\":null,\"name\":\"王五\",\"age\":25},\"女生\":{\"id\":null,\"name\":\"李四\",\"age\":24}}";
        Map<String, User> map2 = mapper.readValue(str, new TypeReference<Map<String, User>>() {});
        System.out.println("json字符串转map:"+map2);
        // 复杂map一层一层拆分转化即可
        for (Object obj : map2.keySet()){
            // 这里与fastJson不同,jackson转成map时已指定里面的类型
            User user = map2.get(obj);
            System.out.println("map里面的value:"+user);

        }
    }

    // json字符串与list之间的相互转化
    @Test
    public void test3() throws IOException {
        ObjectMapper mapper = new ObjectMapper();
        // list转json字符串
        ArrayList<User> list = new ArrayList<>();
        list.add(new User("张三",23));
        list.add(new User("李四",24));
        String text = mapper.writeValueAsString(list);
        System.out.println("list转json字符串:"+text);
        // json字符串转list
        String str = "[{\"id\":null,\"name\":\"王五\",\"age\":25},{\"id\":null,\"name\":\"李四\",\"age\":24}]";
        List<User> list2 = mapper.readValue(str,new TypeReference<List<User>>() {});
        System.out.println("json字符串转list:"+list2);
    }

}

jackson还有很多功能,我这里就只做了json转换的测试

 

其实这两种工具各有利弊,有人说很多情况下,fastjson的效率高一点,也确实是,它是专注json转换的;不过jackson功能更强大些,各大框架也是采用的jackson,各位就按需取用吧

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值