JSON+Jackson
JSON
jar包:
commons-beanutils-1.8.0.jar
commons-collections-3.2.jar
commons-lang-2.3.jar
commons-logging.jar
ezmorph-1.0.6.jar
json-lib-2.4-jdk15.jar
pojo类:
public class Province(){
private int pid;
private String pname;
get和set方法...
toString方法...
}
Java对象转化为字符串
public void testToString(){
Province pro=new Province();
pro.setPid(1);
pro.setPname("北京");
//创建json对象---已经实现了转换
JSONObject js=JSONObject.fromObject(pro);
System.out.println(js);
}
Json字符串转换为Java对象
public void testToObject(){
String str="{\"pid\":1,\"pname\":\"北京\"}";
//将str字符串转为JSONObject类型
JSONObject js=JSONObject.fromObject(str);
System.out.println(js);
//将json字符串转换为对象
Province pro=(Province) JSONObject.toBean(js, Province.class);
System.out.println(pro.getPid()+","+pro.getPname());
}
List集合转换为Json字符串
public void testListToString(){
Province pro1=new Province();
pro1.setPid(1);
pro1.setPname("北京");
Province pro2=new Province();
pro2.setPid(2);
pro2.setPname("上海");
List<Province>pros=new ArrayList<>();
pros.add(pro2);
pros.add(pro1);
//将list集合转换为json
JSONArray js=JSONArray.fromObject(pros);
System.out.println(js);
}
Json字符串转换为List集合
public void testStringToList(){
String str="[{\"pid\":2,\"pname\":\"上海\"},{\"pid\":1,\"pname\":\"北京\"}]";
JSONArray js=JSONArray.fromObject(str);
// 两种方式:1.转为list集合
//List<Province>pros=(List<Province>) JSONArray.toCollection(js, Province.class);
// 2.转为数组
Province[]pros=(Province[]) JSONArray.toArray(js, Province.class);
for(Province pro:pros)
System.out.println(pro.getPid()+","+pro.getPname());
}
Map集合转换为Json字符串
public void testMapToString(){
Province pro1=new Province();
pro1.setPid(1);
pro1.setPname("北京");
Province pro2=new Province();
pro2.setPid(2);
pro2.setPname("上海");
Map<String,Province>pm=new HashMap<>();
pm.put("pro1", pro1);
pm.put("pro2", pro2);
JSONArray js=JSONArray.fromObject(pm);
System.out.println(js);
JSONObject jso=JSONObject.fromObject(pm);
System.out.println(jso);
}
Json字符串转换为Map集合
public void testStringToMap() {
String str = "{\"pro1\":{\"pid\":1,\"pname\":\"北京\"},\"pro2\":{\"pid\":2,\"pname\":\"上海\"}}";
Map<String, Province> pm = new HashMap<>();
JSONObject js = JSONObject.fromObject(str);
Set<String> keys = js.keySet();
for (String key : keys) {
if (key != null) {
Object obj = js.get(key);
Province pro = (Province) JSONObject.toBean(JSONObject.fromObject(obj), Province.class);
pm.put(key, pro);
}
}
Province p = pm.get("pro1");
System.out.println(p.getPid() + "," + p.getPname());
}
Jackson
jar包:
jackson-core-asl-1.9.13.jar
jackson-mapper-asl-1.9.13.jar
pojo类:
public class Province(){
private int pid;
private String pname;
get和set方法...
toString方法...
}
方法
-
类或集合 转 字符串:
writeValueAsString(pro)
-
字符串转 类或集合:
readValue(str, Province.class)
类转字符串
public void testObjectToString() throws IOException {
Province pro = new Province();
pro.setPid(1);
pro.setPname("北京");
//创建实现转换的对象
ObjectMapper mapper = new ObjectMapper();
String str= mapper.writeValueAsString(pro);
System.out.println(str);
}
字符串转类
public void testStringToObject() throws IOException {
String str = "{\"pid\":1,\"pname\":\"北京\"}";
ObjectMapper mapper = new ObjectMapper();
//将json字符串解析为一个Java对象
Province pro = mapper.readValue(str, Province.class);
System.out.println(pro.toString());
}
集合转字符串
public void testListToString() throws IOException {
Province pro1 = new Province();
pro1.setPid(1);
pro1.setPname("北京");
Province pro2 = new Province();
pro2.setPid(2);
pro2.setPname("深圳");
List<Province> pros = new ArrayList<>();
pros.add(pro1);
pros.add(pro2);
ObjectMapper mapper = new ObjectMapper();
String str = mapper.writeValueAsString(pros);
System.out.println(str);
}
字符串转化为集合
-
转为List 集合:
public void testStringToList() throws IOException { String str = "[{\"pid\":2,\"pname\":\"深圳\"},{\"pid\":1,\"pname\":\"北京\"}]"; ObjectMapper mapper = new ObjectMapper(); // List<Province> list = mapper.readValue(str, List.class); //只用这个方法无法指定List集合中的元素的类的类型,会抛出类型转化异常:java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.k.pojo.Province //为了解决无法指定集合内部元素的类的类类型的问题:用getTypeFactory()获得一个工厂对象,然后用这个工厂对象的constructParametricType(集合类型,元素类型) 方法,将集合类型和元素类型封装到一起。 List<Province> pros = mapper.readValue(str, mapper.getTypeFactory().constructParametricType(List.class, Province.class)); for (Province pro :pros) { System.out.println(pro.toString()); } }
-
转为Map 集合:
public void testStringToMap() throws IOException { String str = "{\"pro1\":{\"pid\":1,\"pname\":\"北京\"},\"pro2\":{\"pid\":2,\"pname\":\"深圳\"}}"; ObjectMapper mapper = new ObjectMapper(); Map<String,Province>pros = mapper.readValue(str, new TypeReference<Map<String, Province>>() { }); //TypeReference类: TypeReference<集合,value元素类型>(){} Iterator<String> it = pros.keySet().iterator(); while (it.hasNext()) { String key = it.next(); System.out.println(key+","+pros.get(key)); } }
JSP中的解析(JS中)
导入的外部js:
<script type="text/javascript" src="js/json.js"></script>
方法:
- 转换为Json字符串:
JSON.stringify()
- Json字符串解析出属性和值:
- 原生js:
eval("("+jsonStr+")")
- parse方法:
JSON.parse(jsonStr)
- 原生js:
对象转为JSON字符串
<script type="text/javascript" src="${pageContext.request.contextPath}/js/json.js"></script>
//${pageContext.request.contextPath}:EL表达式输出项目路径
<%--将对象转为一个json字符串--%>
<script type="text/javascript">
function Province(pid, pname) {
this.pid = pid;
this.pname= pname;
}
//创建一个js对象
var pro = new Province(1,"北京");
//将对象转换为一个json字符串
var str = JSON.stringify(pro);
//parse 方法的作用是将json字符串中的属性和值解析出来(没有解析出对象的类类型)
var pro1 = JSON.parse(str);
alert(pro1.pid+","+pro1.pname);
</script>