44.json解析

@一贤不穿小鞋

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);
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值