@一贤不穿小鞋
1.Json:JavaScript object notation的简称,js对象简谱,js的本地对象.
1.1:声明Json对象和Json对象数组的语法:
- var 对象名={“属性名1”:“值1”,“属性名2”:“值2”…};
- var 数组名=[{“属性名1”:“值1”,“属性名2”:“值2”…},
{“属性名1”:“值1”,“属性名2”:“值2”…}…];
1.2:调用Json对象的属性:
- 对象名.属性名 或 对象名[“属性名”]
1.3:调用Json对象数组的属性:
- 数组名[索引].属性名 或 数组名[索引][“属性名”]
2.Json的作用:轻量级数据交换格式,可以用于前后台交换数据.
3.Json解析(重点):fastjson-版本号.jar
3.1:json字符串与Java对象和Json对象三者之间相互转换
eg:public static void main(String[] args) {
//准备json字符串
String s1= "{'sname':'林公子','sage':18}";
//json字符串转换为Json对象
JSONObject ob1=JSON.parseObject(s1);
System.out.println("json对象调用属性:"+ob1.getString("sname")+","+ob1.getInteger("sage"));
//json字符串转换为Java对象,前提条件Java对象的属性名与json字符串对应属性名一致
Student stu1=JSON.parseObject(s1, Student.class);
System.out.println(stu1);
//json对象转换为Java对象,前提条件Java对象的属性名与json对象对应属性名一致
Student stu2=JSON.toJavaObject(ob1, Student.class);
System.out.println(stu2);
//java对象转换为json对象
JSONObject ob2=(JSONObject) JSON.toJSON(stu2);
System.out.println("2json对象调用属性:"+ob2.getString("sname")+","+ob2.getInteger("sage"));
//java对象和json对象转换为json字符串
String s2=JSON.toJSONString(stu2);//这个方法可以将任何对象转换为Json字符串
System.out.println(s2);
}
3.2:Json数组字符串与Java集合和Json数组三者之间相互转换
eg:public static void main(String[] args) {
//准备一个Json数组字符串
String s1="[{'sname':'柳贤','sage':18},{'sname':'林公子','sage':100}]";
//Json数组字符串转换java集合
List<Student> stuList1=JSON.parseArray(s1, Student.class);
// for (Student s : stuList1) {
// System.out.println(s);
// }
//Json数组字符串转换Json数组
JSONArray arr1=JSON.parseArray(s1);
// for (int i = 0; i < arr1.size(); i++) {
// //获得当前遍历json对象
// JSONObject ob=arr1.getJSONObject(i);
// //用json对象调用属性输出
// System.out.println("姓名:"+ob.getString("sname")+",年龄:"+ob.getInteger("sage"));
// }
//java集合转换Json数组
JSONArray arr2=(JSONArray) JSON.toJSON(stuList1);
// for (int i = 0; i < arr2.size(); i++) {
// //获得当前遍历json对象
// JSONObject ob=arr2.getJSONObject(i);
// //用json对象调用属性输出
// System.out.println("姓名:"+ob.getString("sname")+",年龄:"+ob.getInteger("sage"));
// }
/* json数组不能直接转换java集合,只能间接转换*/
//将json数组转换json数组字符串
String s2=JSON.toJSONString(arr2);
//将json数组字符串转换java集合
List<Student> stuList2=JSON.parseArray(s2, Student.class);
for (Student s : stuList2) {
System.out.println(s);
}
//json数组或java集合转换json数组字符串
String s3=JSON.toJSONString(stuList2);//将任何对象转换Json字符串
System.out.println(s3);
}
4.Json解析(了解):jackson-core-版本号.jar 和 jackson-databind-2.9.10.jar 和 jackson-annotations-2.9.10.jar
- 可以将Json(数组)字符串与java对象(集合)相互转换
- 注意:jackJson不认json字符串中单引号
eg:public static void main(String[] args) throws Exception {
//准备一个json字符串,Jackson不认单引号
String s1="{\"sname\":\"张建超\",\"sage\":23}";
//创建jackson转换对象
ObjectMapper om=new ObjectMapper();
//将Json字符串转换java对象
Student stu1=om.readValue(s1, Student.class);
System.out.println(stu1);
//将Java对象转换Json字符串
String s2=om.writeValueAsString(stu1);
System.out.println(s2);
//准备一个json数组字符串
String s3="[{\"sname\":\"张建超1\",\"sage\":43},{\"sname\":\"张建超2\",\"sage\":33}]";
//将Json数组字符串转换Java集合
List<Student> stuList1=om.readValue(s3, new TypeReference<List<Student>>() {});
for (Student s : stuList1) {
System.out.println(s);
}
//将Java集合转换json数组字符串
String s4=om.writeValueAsString(stuList1);
System.out.println(s4);
}
5.在前端实现json对象或数组和json字符串之间相互转换
5.1:在前端,将Json对象转换Json字符串:JSON.stringify(json对象);
5.2:在前端,将Json字符串转换Json对象:
5.2.1:语法一:eval("("+json字符串+")")
- json字符串无要求
5.2.2:语法二:JSON.parse(json字符串);
- json字符串中不识别单引号
eg://准备一个json对象
var ob1={"sname":"张三","sage":22};
//输出对象属性
//alert(ob1);
//alert(ob1.sname+","+ob1["sage"]);
//将json对象转换json字符串
var s1=JSON.stringify(ob1);
//alert(s1);
//第一种:将Json字符串转换Json对象
var ob2=eval("("+s1+")");
//alert(ob2);
//alert(ob2.sname+"-"+ob2.sage)
//第二种:将json字符串转换json对象
var ob3=JSON.parse(s1);
alert(ob3);
alert(ob3.sname+"|"+ob3.sage);