java转换json常用的四种方式:

1. Gson

依赖

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.8.5</version>
</dependency>

封装的工具类

package com.example.demo.common.json;

import com.google.gson.Gson;

import java.lang.reflect.Type;

/**
 * 使用Gson进行json转换
 * @author future
 * @date 2018-10-06 16:29
 */
public class GsonUtil {
    private GsonUtil() {}

    /**
     * javaBean或集合转换为json
     * @date 2018/10/6 16:35
     * @params [object]
     * @return java.lang.String
    */
    public static String beanToJson(Object object) {
        Gson gson = new Gson();
        return gson.toJson(object);
    }

    /**
     * json转为javabean
     * @date 2018/10/6 16:37
     * @params [json, clazz]
     * @return T
    */
    public static <T> T jsonToBean(String json, Class<T> clazz) {
        Gson gson = new Gson();
        return gson.fromJson(json, clazz);
    }

    /**
     * json转换为集合
     * @date 2018/10/6 16:43
     * @param json
     * @param typeOfT
     *{@code Collection<Foo>}, you should use:
     *    <pre>
     *    Type typeOfT = new TypeToken&lt;Collection&lt;Foo&gt;&gt;(){}.getType();
     *    </pre>
     * @return T
    */
    public static <T> T jsonToCollection(String json, Type typeOfT) {
        Gson gson = new Gson();
        return gson.fromJson(json, typeOfT);
    }
}

demo

package com.example.demo.common.json;

import com.example.demo.common.json.model.User;
import com.google.gson.reflect.TypeToken;
import org.junit.Test;

import java.util.List;

/**
 * @author future
 * @date 2018-10-06 15:42
 */
public class GsonDemo {

    @Test
    public void run() {
        jsonToBeanByUtil();
        jsonToListByUtil();
        beanToJsonByUtil();
        listToJsonByUtil();
    }

    private void jsonToBeanByUtil() {
        String json = JsonDemoHelper.initJson();
        User user = GsonUtil.jsonToBean(json, User.class);
        System.out.println("jsonToBean: " + user);
    }
    private void jsonToListByUtil() {
        String json = JsonDemoHelper.initListJson();
        List<User> users = (List) GsonUtil.jsonToCollection(json, new TypeToken<List<User>>(){}.getType());
        users.forEach(user -> System.out.println("user: " + user));
    }
    private void beanToJsonByUtil() {
       User user = JsonDemoHelper.initBean();
       String json = GsonUtil.beanToJson(user);
       System.out.println("beanToJson: " + json);
    }
    private void listToJsonByUtil() {
        List<User> users = JsonDemoHelper.initList();
        String json = GsonUtil.beanToJson(users);
        System.out.println("listToJson: " + json);
    }

}

2. jackson

依赖

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

封装的工具类

package com.example.demo.common.json;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;

import java.io.IOException;

/**
 * 使用jackson进行简单json转换的工具类
 * @author future
 * @date 2018-10-06 18:44
 */
public class JacksonUtil {

    private JacksonUtil() {}

    /**
     * javaBean或集合转换为json
     * @date 2018/10/6 16:35
     * @params [object]
     * @return java.lang.String
     */
    public static String beanToJson(Object object) {
        ObjectMapper mapper = new ObjectMapper();
        try {
            return mapper.writeValueAsString(object);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * json转为javabean
     * @date 2018/10/6 16:37
     * @params [json, clazz]
     * @return T
     */
    public static <T> T jsonToBean(String json, Class<T> clazz) {
        ObjectMapper mapper = new ObjectMapper();
        try {
            return mapper.readValue(json, clazz);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * json转换为集合
     * @date 2018/10/6 16:43
     * @param json
     * @param valueTypeRef
     *{@code Collection<Foo>}, you should use:
     *    <pre>
     *    TypeReference valueTypeRef = new TypeReference&lt;Collection&lt;Foo&gt;&gt;(){};
     *    </pre>
     * @return T
     */
    public static <T> T jsonToCollection(String json, TypeReference valueTypeRef) {
        ObjectMapper mapper = new ObjectMapper();
        try {
            return mapper.readValue(json, valueTypeRef);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}

demo

package com.example.demo.common.json;

import com.example.demo.common.json.model.User;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import org.junit.Test;

import java.io.IOException;
import java.util.List;

/**
 * @author future
 * @date 2018-10-06 17:47
 */
public class JacksonDemo {

    @Test
    public void run() {
        try {
            jsonToBean();
            jsonToList();
            beanToJson();
            listToJson();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void jsonToBean() throws IOException {
        String json = JsonDemoHelper.initJson();
        User user = JacksonUtil.jsonToBean(json, User.class);
        System.out.println("jsonToBean: " + user);
    }
    private void jsonToList() throws IOException {
        String json = JsonDemoHelper.initListJson();
        List<User> users = JacksonUtil.jsonToCollection(json, new TypeReference<List<User>>() {});
        users.forEach(user -> System.out.println("user: " + user));
    }
    private void beanToJson() throws JsonProcessingException {
        User user = JsonDemoHelper.initBean();
        String json = JacksonUtil.beanToJson(user);
        System.out.println("beanToJson: " + json);
    }
    private void listToJson() throws JsonProcessingException {
        List<User> users = JsonDemoHelper.initList();
        String json = JacksonUtil.beanToJson(users);
        System.out.println("listToJson: " + json);
    }
}

注意

需要被转化的bean有无参构造

3. fastjson

依赖

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

封装的工具类

package com.example.demo.common.json;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.util.List;

/**
 * 使用fastjson转换json
 * @author future
 * @date 2018-10-06 20:52
 */
public class FastjsonUtil {
    private FastjsonUtil() {}

    /**
     * javaBean转换为json
     * @date 2018/10/6 16:35
     * @params [object]
     * @return java.lang.String
     */
    public static String beanToJson(Object object) {
        return JSONObject.toJSONString(object);
    }

    /**
     * 集合转换为json
     * @date 2018/10/6 16:35
     * @params [object]
     * @return java.lang.String
     */
    public static String listToJson(Object object) {
        return JSONArray.toJSONString(object);
    }

    /**
     * json转为javabean
     * @date 2018/10/6 16:37
     * @params [json, clazz]
     * @return T
     */
    public static <T> T jsonToBean(String json, Class<T> clazz) {
        return JSONObject.parseObject(json, clazz);
    }

    /**
     * json转换为list集合
     * @date 2018/10/6 16:43
     * @param json
     * @param clazz
     * @return java.util.List<T>
     */
    public static <T> List<T> jsonToCollection(String json, Class<T> clazz) {
        return JSONArray.parseArray(json, clazz);
    }
}

demo

package com.example.demo.common.json;

import com.example.demo.common.json.model.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

import java.util.List;

/**
 * fastjsonDemo
 * @author future
 * @date 2018-10-06 20:37
 */
@Slf4j
public class FastjsonDemo {

    @Test
    public void run() {
        jsonToBean();
        jsonToList();
        beanToJson();
        listToJson();
    }

    private void jsonToBean() {
        String json = JsonDemoHelper.initJson();
        User user = FastjsonUtil.jsonToBean(json, User.class);
        log.info("jsonToBean: {}", user);
    }
    private void jsonToList() {
        String json = JsonDemoHelper.initListJson();
        List<User> users = FastjsonUtil.jsonToCollection(json, User.class);
        users.forEach(user -> log.info("jsonToList: {}", user));
    }
    private void beanToJson() {
        User user = JsonDemoHelper.initBean();
        String json = FastjsonUtil.beanToJson(user);
        log.info("beanToJson: {}", json);
    }
    private void listToJson() {
        List<User> users = JsonDemoHelper.initList();
        String json = FastjsonUtil.listToJson(users);
        log.info("listToJson: {}", json);
    }
}

4. json-lib

依赖

<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>

封装的工具类

package com.example.demo.common.json;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

import java.util.Collection;
import java.util.Map;

/**
 * 使用json-lib转换json
 * @author future
 * @date 2018-10-06 22:04
 */
public class JsonLibUtil {
    private JsonLibUtil() {}

    /**
     * javaBean转换为json
     * @date 2018/10/6 16:35
     * @params [object]
     * @return java.lang.String
     */
    public static String beanToJson(Object object) {
        return JSONObject.fromObject(object).toString();
    }

    /**
     * 集合转换为json
     * @date 2018/10/6 16:35
     * @params [object]
     * @return java.lang.String
     */
    public static String listToJson(Object object) {
        return JSONArray.fromObject(object).toString();
    }

    /**
     * json转为javabean
     * @date 2018/10/6 16:37
     * @params [json]
     * @return Object
     */
    public static <T> Object jsonToBean(String json, Class<T> clazz) {
        return JSONObject.toBean(JSONObject.fromObject(json), clazz);
    }

    /**
     * json转换为list集合
     * @date 2018/10/6 16:43
     * @param json
     * @param clazz
     * @param clssMap
     * @return java.util.Collection<T>
     */
    public static <T> Collection<T> jsonToCollection(String json, Class<T> clazz, Map clssMap) {
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setClassMap(clssMap);
        jsonConfig.setRootClass(clazz);
        return JSONArray.toCollection(JSONArray.fromObject(json), jsonConfig);
    }
}

demo

package com.example.demo.common.json;

import com.example.demo.common.json.enums.SexEnum;
import com.example.demo.common.json.model.Role;
import com.example.demo.common.json.model.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;

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

/**
 * fastjsonDemo
 * @author future
 * @date 2018-10-06 20:37
 */
@Slf4j
public class JsonLibDemo {

    @Test
    public void run() {
        jsonToBean();
        jsonToList();
        beanToJson();
        listToJson();
    }

    private void jsonToBean() {
        String json = JsonDemoHelper.initJson();
        User user = (User) JsonLibUtil.jsonToBean(json, User.class);
        log.info("jsonToBean: {}", user);
    }
    private void jsonToList() {
        String json = JsonDemoHelper.initListJson();
        Map classMap = new HashMap<>();
        // roles是list,但这里需要的是list的泛型
        classMap.put("roles", Role.class);
        classMap.put("sex", SexEnum.class);
        List<User> users = (List<User>) JsonLibUtil.jsonToCollection(json, User.class, classMap);
        users.forEach(user -> {
            log.info("jsonToList: {}", user);
            log.info("sex: {}", user.getSex());
            log.info("roleName: {}", user.getRoles().get(0).getRoleName());
        });
    }
    private void beanToJson() {
        User user = JsonDemoHelper.initBean();
        String json = JsonLibUtil.beanToJson(user);
        log.info("beanToJson: {}", json);
    }
    private void listToJson() {
        List<User> users = JsonDemoHelper.initList();
        String json = JsonLibUtil.listToJson(users);
        log.info("listToJson: {}", json);
    }
}

注意

当bean的属性为list时,需要再classmap中添加,且值为list的泛型

其他bean模型和辅助类

这里使用了lombok

package com.example.demo.common.json.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * @author future
 * @date 2018-10-06 15:46
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Role {
    private String roleName;
}

package com.example.demo.common.json.model;

import com.example.demo.common.json.enums.SexEnum;
import lombok.Data;

import java.util.List;

/**
 * @author future
 * @date 2018-10-06 15:45
 */
@Data
public class User {
    private String userName;
    private SexEnum sex;
    private List<Role> roles;
}

package com.example.demo.common.json.enums;

public enum SexEnum {
    MALE, FEMALE
}

package com.example.demo.common.json;

import com.example.demo.common.json.enums.SexEnum;
import com.example.demo.common.json.model.Role;
import com.example.demo.common.json.model.User;

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

/**
 * @author future
 * @date 2018-10-06 17:41
 */
public class JsonDemoHelper {
    private JsonDemoHelper() {}

    public static String initJson() {
        return "{\"userName\":\"张三\",\"sex\":\"MALE\",\"roles\":[{\"roleName\":\"管理员\"},{\"roleName\":\"白金会员\"}]}";
    }

    public static String initListJson() {
        return "[{\"userName\":\"张三\",\"sex\":\"MALE\",\"roles\":[{\"roleName\":\"管理员\"},{\"roleName\":\"白金会员\"}]},{\"userName\":\"张三\",\"sex\":\"MALE\",\"roles\":[{\"roleName\":\"管理员\"},{\"roleName\":\"白金会员\"}]}]";
    }

    public static User initBean() {
        List<Role> roles = new ArrayList<Role>();
        roles.add(new Role("管理员"));
        roles.add(new Role("白金会员"));
        User user = new User();
        user.setSex(SexEnum.MALE);
        user.setUserName("张三");
        user.setRoles(roles);
        return user;
    }

    public static List<User> initList() {
        List<User> users = new ArrayList<>(2);
        users.add(JsonDemoHelper.initBean());
        users.add(JsonDemoHelper.initBean());
        return users;
    }
}
10-07 12:46