JSON概念
1. 本质:JSON是一个字符串。
2. 作用:JSON是JS对象的字符串表示法,用来表示JS的一个对象。
3. 表示法:花括号表示对象,方括号表示数组,逗号分隔数据,键值对表示数据。
JSON与Java对象之间的数据格式转换
1. 概念:JSON是一种轻量级数据交换格式,在数据交换过程中使用(如:Ajax请求),不仅仅局限于JS对象,可以与各种编程语言所支持的数据格式进行转换。我们需要将对象转换为字符串进行数据传递。花括号就表示Java中的一个对象,对象中的属性以键值对的形式写在花括号中,用逗号分割各个属性。
2. 对应关系举例:
Java中的一个Student类的对象与JSON的对应如下:
{
"name":"李明",
"gender":"男",
"cid":"111111",
"clazz":"计算机2016级04班",
"age":"20"
}
public class Student {
private String name; //姓名
private String gender; //年龄
private String cid; //学号
private String clazz; //班级
private int age; //年龄
}
如果对象中有数组的话:
{
"cid":"1",
"cname":"程序设计",
"desc":"程序设计分类",
"pid":"null",
"children":[
{
"cid":"10",
"cname":"Java",
"desc":"Java Javascript分类",
"pid":"1"
},
{
"cid":"11",
"cname":"PHP",
"desc":"PHP分类",
"pid":"1"
},
{
"cid":"12",
"cname":"HTML XML",
"desc":"HTML XML分类",
"pid":"1"
},
{
"cid":"13",
"cname":"C C++ VC VC++",
"desc":"C C++ VC VC++分类",
"pid":"1"
},
{
"cid":"14",
"cname":".NET",
"desc":".NET分类",
"pid":"1"
}
]
}
public class Category {
private String cid; // 分类id
private String cname; // 分类名称
private String pid; // 二级分类所对应的一级分类的cid
private String desc; // 分类描述
private List<Category> children; // 子分类数组
}
3. Java的对象转换成JSON格式的代码:
转换单个对象为JSON,如:{"name":"liming","gender":"男","age":"20"},:
private String toJson(Category category){
StringBuilder json = new StringBuilder("{");
json.append("\"cid\"").append(":").append("\"").append(category.getCid()).append("\"");
json.append(",");
json.append("\"cname\"").append(":").append("\"").append(category.getCname()).append("\"");
json.append("}");
return json.toString();
}
代码解释:\"表示的就是",\是转义字符。
转换对象数组为JSON,如:[{"":""},{"":""},{"":""}]:
private String toJson(List<Category> cateList){
StringBuilder json = new StringBuilder("[");
int i = 0;
for(i=0;i<cateList.size()-1;i++){
json.append(this.toJson( cateList.get(i) )).append(",");
}
json.append(this.toJson( cateList.get(i) ));
json.append("]");
return json.toString();
}
Ajax请求使用JSON作为返回数据的类型:
$.ajax({
async : true, //异步请求
cache : false, //不获取缓存中的数据,获取服务端最新返回的数据
url : "/bookstore/BookServlet",
data : { //请求参数
method : "ajaxFindChildren",
pid : pid
},
type : "POST", //请求类型
dataType : "json", //返回数据的数据类型,也就是下方arr的数据类型
success : function(arr) { //请求成功后的回调函数,arr就是一个json格式的对象或者对象数组
}
});