接上一篇继续学习json字符串与对象之间的转换,这里我们使用jackson包和fastjson包分别演示。
一,引入依赖包:
<!-- jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.6.5</version>
</dependency>
<!-- fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.23</version>
</dependency>
二,新建测试javabean
package com.example.entity;
public class UserInfo {
private String name;
private String password;
public UserInfo() {
}
public UserInfo(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserInfo [name=" + name + ", password=" + password + "]";
}
}
package com.example.entity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* json对象转换类
* @author Administrator
*
*/
public class JsonObjectVo {
private String title;
private String msg;
private Map<String,Object> map = new HashMap<String,Object>();
private List<UserInfo> list = new ArrayList<UserInfo>();
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public Map<String, Object> getMap() {
return map;
}
public void setMap(Map<String, Object> map) {
this.map = map;
}
public List<UserInfo> getList() {
return list;
}
public void setList(List<UserInfo> list) {
this.list = list;
}
}
三,新建测试类
package com.example.test;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import com.example.entity.JsonObjectVo;
import com.example.entity.UserInfo;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
/**
* 使用jackson 进行对象与json字符串的转换
* @author Administrator
*
*/
public class JacksonTest {
@Test
public void object2Json() throws JsonProcessingException{
JsonObjectVo vo = new JsonObjectVo();
vo.setTitle("对象转json");
vo.setMsg("对象属性包括map和list");
Map<String,Object> map = vo.getMap();
map.put("mkey1", "mvalue1");
map.put("mkey2", "mvalue2");
vo.setMap(map);
List<UserInfo> list = vo.getList();
list.add(new UserInfo("user1","pwd1"));
list.add(new UserInfo("user2","pwd2"));
vo.setList(list);
ObjectMapper objectMapper = new ObjectMapper();
//设置格式
objectMapper.configure(SerializationFeature.INDENT_OUTPUT, Boolean.TRUE);
String json = objectMapper.writeValueAsString(vo);
System.out.println("测试一,对象转json:"+json);
}
@Test
public void json2Object() throws IOException{
String json = "{\"title\" : \"对象转json\",\"msg\" : \"对象属性包括map和list\","
+ "\"map\" : {\"mkey2\" : \"mvalue2\",\"mkey1\" : \"mvalue1\"},"
+ "\"list\" : [ {\"name\" : \"user1\",\"password\" : \"pwd1\"}, "
+ "{\"name\" : \"user2\",\"password\" : \"pwd2\"} ]}";
ObjectMapper objectMapper = new ObjectMapper();
JsonObjectVo vo = objectMapper.readValue(json,JsonObjectVo.class);
System.out.println("测试二,json转对象:"+vo);
//如果不知道json字符串反序列化的对象是什么,可以直接封装成map对象
Map<String,Object> map = objectMapper.readValue(json, Map.class);
System.out.println("测试三,json转Map:"+map);
}
}
四,运行junit,查看控制台输出结果:
测试一,对象转json:{
"title" : "对象转json",
"msg" : "对象属性包括map和list",
"map" : {
"mkey2" : "mvalue2",
"mkey1" : "mvalue1"
},
"list" : [ {
"name" : "user1",
"password" : "pwd1"
}, {
"name" : "user2",
"password" : "pwd2"
} ]
}
测试二,json转对象:JsonObjectVo [title=对象转json, msg=对象属性包括map和list, map={mkey2=mvalue2, mkey1=mvalue1}, list=[UserInfo [name=user1, password=pwd1], UserInfo [name=user2, password=pwd2]]]
测试三,json转Map:{title=对象转json, msg=对象属性包括map和list, map={mkey2=mvalue2, mkey1=mvalue1}, list=[{name=user1, password=pwd1}, {name=user2, password=pwd2}]}
五,测试fastjson
package com.example.test;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import com.alibaba.fastjson.JSON;
import com.example.entity.JsonObjectVo;
import com.example.entity.UserInfo;
/**
* 使用 fastjson 进行对象与json字符串的转换
* @author Administrator
*
*/
public class fastjsonTest {
@Test
public void object2Json() throws IOException{
JsonObjectVo vo = new JsonObjectVo();
vo.setTitle("对象转json");
vo.setMsg("对象属性包括map和list");
Map<String,Object> map = vo.getMap();
map.put("mkey1", "mvalue1");
map.put("mkey2", "mvalue2");
vo.setMap(map);
List<UserInfo> list = vo.getList();
list.add(new UserInfo("user1","pwd1"));
list.add(new UserInfo("user2","pwd2"));
vo.setList(list);
String json = JSON.toJSONString(vo);
System.out.println("测试一,对象转json:"+json);
}
@Test
public void json2Object() throws IOException{
String json = "{\"title\" : \"对象转json\",\"msg\" : \"对象属性包括map和list\","
+ "\"map\" : {\"mkey2\" : \"mvalue2\",\"mkey1\" : \"mvalue1\"},"
+ "\"list\" : [ {\"name\" : \"user1\",\"password\" : \"pwd1\"}, "
+ "{\"name\" : \"user2\",\"password\" : \"pwd2\"} ]}";
JsonObjectVo vo = JSON.parseObject(json,JsonObjectVo.class);
System.out.println("测试三,json转Map:"+vo);
@SuppressWarnings("unchecked")
Map<String,Object> map = JSON.parseObject(json,Map.class);
System.out.println("测试三,json转Map:"+map);
}
}
六,运行junit,查看控制台输出结果:
测试一,对象转json:{"list":[{"name":"user1","password":"pwd1"},{"name":"user2","password":"pwd2"}],"map":{"mkey2":"mvalue2","mkey1":"mvalue1"},"msg":"对象属性包括map和list","title":"对象转json"}
测试三,json转Map:JsonObjectVo [title=对象转json, msg=对象属性包括map和list, map={mkey2=mvalue2, mkey1=mvalue1}, list=[UserInfo [name=user1, password=pwd1], UserInfo [name=user2, password=pwd2]]]
测试三,json转Map:{msg=对象属性包括map和list, title=对象转json, list=[{"password":"pwd1","name":"user1"},{"password":"pwd2","name":"user2"}], map={"mkey2":"mvalue2","mkey1":"mvalue1"}}
其他用法,大家自行测试吧。