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<Collection<Foo>>(){}.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<Collection<Foo>>(){};
* </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;
}
}