用两种方法实现:
1,使用gson
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.5</version>
</dependency>
json字符串转换长对象:
对象转换成json:
案例:
Gson gson =new Gson();
Dog dog=new Dog();
dog.setAge("12");
dog.setName("大黄");
String jsonString=gson.toJson(dog);
System.out.println(jsonString);
Dog dog1=gson.fromJson(jsonString, Dog.class);
System.out.println(dog1.getName());
2,使用jackson
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.6</version>
</dependency>
案例:
public class JsonUtil {
private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
/**
* Json格式的字符串向JavaBean转换,传入空串将返回null
* @param strBody Json格式的字符串
* @param c 目标JavaBean类型
* @return JavaBean对象
* @throws JsonParseException
* @throws JsonMappingException
* @throws IOException
*/
public static <T>T json2Object(String strBody,Class<T> c) throws JsonParseException, JsonMappingException, IOException{
if(strBody==null || "".equals(strBody)){
return null;
}else{
strBody = EscapeCompatible(strBody);
ObjectMapper mp = new ObjectMapper();
T t = (T)mp.readValue(strBody,c);
return t;
}
}
/**
*
* @param strBody
* @param c
* @return
* @throws JsonParseException
* @throws JsonMappingException
* @throws IOException
*/
public static Object json2ComplexObject(String strBody) throws JsonParseException, JsonMappingException, IOException{
if(strBody==null || "".equals(strBody)){
return null;
}else{
strBody = EscapeCompatible(strBody);
ObjectMapper mp = new ObjectMapper();
Object o = mp.readValue(strBody,Object.class);//每个属性的实际类型是string
return o;
}
}
/**
* Json格式的字符串向JavaBean List集合转换,传入空串将返回null
* @param <T>
* @param <T>
* @param <T>
* @param strBody
* @param c
* @return
* @return
* @throws JsonParseException
* @throws JsonMappingException
* @throws IOException
*/
public static <T> List<T> json2ObjectList(String strBody,Class<T> c) throws JsonParseException, JsonMappingException, IOException{
if(strBody==null || "".equals(strBody)){
return null;
}else{
strBody = EscapeCompatible(strBody);
ObjectMapper mp = new ObjectMapper();
JavaType javaType = mp.getTypeFactory().constructParametricType(ArrayList.class, c);
List<T> lst = (List<T>)mp.readValue(strBody, javaType);
return lst;
}
}
/**
* Json格式的字符串向List<String>集合转换,传入空串将返回null
* @param strBody
* @return
* @throws JsonParseException
* @throws JsonMappingException
* @throws IOException
*/
public static List<String> json2List(String strBody) throws JsonParseException, JsonMappingException, IOException{
if(strBody==null || "".equals(strBody)){
return null;
}else{
strBody = EscapeCompatible(strBody);
ObjectMapper mp = new ObjectMapper();
List<String> t = (List<String>)mp.readValue(strBody, List.class);
return t;
}
}
/**
* 转义兼容方法,若URL中的反斜杠是单杠,则增加一个反斜杠用以转义
* @param strBody
* @return
*/
private static String EscapeCompatible(String strBody) {
int s = strBody.indexOf("\\");//第一个反斜杠的位置
char a = strBody.charAt(s+1);//第一个反斜杠后边的那个字符
/*
* 如果解析后的url中的反斜杠是单杠,则转义
*/
if(!String.valueOf(a).equals("\\")){
strBody = strBody.replace("\\", "\\\\");
}
return strBody;
}
/**
* Object转为Json格式字符串的方法
* @param o
* @return
* @throws JsonProcessingException
*/
public static String object2Json(Object o) throws JsonProcessingException{
ObjectMapper mp = new ObjectMapper();
return mp.writeValueAsString(o);
}
public static String encodeObject(Object o) {
try {
return OBJECT_MAPPER.writeValueAsString(o);
} catch (JsonProcessingException e) {
e.printStackTrace();
return null;
}
}
/**
* Json格式的字符串向JavaBean转换,传入空串将返回null
* @param strBody Json格式的字符串
* @param c 目标JavaBean类型
* @return JavaBean对象, 如果解析失败返回 null
*/
public static <T> T decodeJson(String strBody, Class<T> c) {
if (strBody == null || "".equals(strBody)) {
return null;
}
else {
try {
return OBJECT_MAPPER.readValue(strBody, c);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
}
}
String jString=JsonUtil.object2Json(dog);
System.out.println(jString);
Dog dog2=JsonUtil.json2Object(jString, Dog.class);
System.out.println(dog2.getAge());