10.30 Json

10.30 Json

一、概念

1、JS对象表示法(注:json是对象,不是类)
1.1 在java中有对象表示,比如:
Person p=new Person();
p.setName=“张三”;
p.setAge=“23”;
p.setGender=“男”;

1.2 在js也想使用对象,则使用json
var p={“name”:“张三”,“age”:“23”,“gender”:“男”};
现在的json不止这些,还有了更广泛的应用

现在Json :多用于存储和交换信息的语法,类似于XML,但更小,更快,更易于解析:即 Json用来存储数据的,并用来传输

二、语法

1、基本规则:
(1)数据在名称/值对中:json数据由键值对构成
键用引号(单双都行)引起来,也可以不用引号
值的取值类型:
数字(直接写,不用引号);
字符串(在双引号中);
逻辑值(true和false);
数组(在方括号中);{“person”:[{},{}]}
Json对象(在花括号中);{“address”:{“Provice”:“陕西”,。。。}}
null值;
(2)数据用逗号分隔:对个键值对用逗号分隔
(3)花括号保存对象:使用{}定义json格式
(4)方括号保存数组:[],对象中可以有数组

<script>
	
	//1.定义基本格式:
		var person={"name":"张三","age":23,"gender":"男"};
		//alert(person);
	
	//2.嵌套格式 {}--》[]:
		var person={
			"persons":
				[
					{"name":"张三","age":23,"gender":"男"},
					{"name":"李四","age":23,"gender":"男"},
					{"name":"王五","age":23,"gender":"男"}
				]
		};
		//alert(person);
		
	//3.嵌套格式 []-->{}:
		var ps=[
			{"name":"张三","age":23,"gender":"男"},
			{"name":"李四","age":23,"gender":"男"},
			{"name":"王五","age":23,"gender":"男"}
		];
	alert(ps);

</script>

2.如何获取json对象的值
(1)json对象.键名(此时键的名称不用引号)
(2)json对象[“键名”](此时键的名称用引号)
(3)数组对象[索引]

(1)
var person={"name":"张三","age":23,"gender":"男"};
		//var name=person.name;
		var name=person["name"];
		alert(name);


(2)
var person={
			"persons":
				[
					{"name":"张三","age":23,"gender":"男"},
					{"name":"李四","age":23,"gender":"男"},
					{"name":"王五","age":23,"gender":"男"}
				]
		};
		//获取数组第三个name的值,即王五
		var name1=person.persons[2].name;
		alert(name1);


(3)
var ps=[
			{"name":"张三","age":23,"gender":"男"},
			{"name":"李四","age":23,"gender":"男"},
			{"name":"王五","age":23,"gender":"男"}
		];
	//alert(ps);
	
	//获取李四的值
	var name2=ps[1].name;
	alert(name2);

3、json的遍历:

(1)
var person={"name":"张三","age":23,"gender":"男"};

//遍历获取Person中键和值:
//for...in循环
for(var key in person){
//此时得到的key为字符串的形式,所以使用person.key是不行的,相当于person."name",有引号了,需要使用person[key]
	alert(key+":"+person[key]);
}		



(2)
var ps=[
	{"name":"张三","age":23,"gender":"男"},
	{"name":"李四","age":23,"gender":"男"},
	{"name":"王五","age":23,"gender":"男"}
];
	
//遍历获取ps中的所有值,由于是数组,所以还需要使用双层循环
for(var i=0;i<ps.length;i++){
	var p=ps[i];
	for(var key in p){
		alert(key+":"+p[key]);
	}
}
三、Json数据与Java对象的转换

Json解析器:封装好的一些类,用起来更方便
常见的json解析器:Jsonlib、Gson、fastjson、jackson
学的是jackson,会用到此解析器

1、Json转java对象
1.1.1 导入jackson 的相关jar包
1.1.2 创建jackson核心对象 ObjectMapper
1.1.3 调用ObjectMapper的相关方法进行转换

  • 转换方法:
    *readValue(json字符串数据,Class)
//json转换成java
	@Test
	public void test5() throws JsonParseException, JsonMappingException, IOException {
		
		String json="{\"gender\":\"男\",\"name\":\"张三\",\"age\":23}";
		ObjectMapper mapper=new ObjectMapper();
		Person person = mapper.readValue(json, Person.class);
		System.out.println(person);
	}

结果:Person [name=张三, age=23, gender=男, data=null]

2、java对象转json(更常用)

2.1使用步骤:
2.1.1 导入jackson 的相关jar包
2.1.2 创建jackson核心对象 ObjectMapper
2.1.3 调用ObjectMapper的相关方法进行转换

  • 转换方法:
    * writeValue(参数1,参数2 obj对象):
    * 参数1说明:
    * File:将obj对象转换成json字符串,并保留到指定的文件中
    * Writer:将obj对象转换成json字符串,并将json数据填充到字符输出流中
    * OutputStream:将obj对象转换成json字符串,并将json数据填充到字节输出流中
    * writeValueAsString(obj):讲对象转成json字符串
创建Person类
使用单元测试的方法进行演示


public class jsonTest {
	
	//使用单元测试的方式进行测试
	
	
	//java对象转为字符串
	@Test
	public void test1() throws IOException {
		//1.创建Person对象
		Person p=new Person();
		p.setName("张三");
		p.setAge(23);
		p.setGender("男");
		
		//2.创建Json的核心对象 ObjectMapper
		ObjectMapper mapper=new ObjectMapper();
		
		//3.调用方法转换
		/*
		 * 转换方法:
		 * writeValue(参数1,参数2 obj对象):
		 * 		参数1说明:
		 * 			File:将obj对象转换成json字符串,并保留到指定的文件中 
		 * 			Writer:将obj对象转换成json字符串,并将json数据填充到字符输出流中
		 * 			OutputStream:将obj对象转换成json字符串,并将json数据填充到字节输出流中
		 * writeValueAsString(obj):讲对象转成json字符串
		 */
		
		//1、结果是:{"name":"张三","age":23,"gender":"男"}
		String json = mapper.writeValueAsString(p);
		System.out.println(json);
		
		//2、将数据写到D://a.txt文件中
		mapper.writeValue(new File("d://a.txt"), p);
		
		//3、将数据关联到writer中
		mapper.writeValue(new FileWriter("d://a.txt"), p);
		
		
	}
}

2.2 两个注解的使用
2.2.1 @JsonIgnore:排除属性
2.2.2 @JsonFormat:属性值格式化

person类中增加了日期:
	private String name;
	private int age;
	private String gender;
	
	private Date data;


(1)不使用注解:
public void test2() throws JsonProcessingException{
		//1.创建Person对象
		Person p=new Person();
		p.setName("张三");
		p.setAge(23);
		p.setGender("男");
		p.setDate(new Date());
		
		ObjectMapper mapper=new ObjectMapper();
		String json = mapper.writeValueAsString(p);
		System.out.println(json); 
}
结果是: {"name":"张三","age":23,"gender":"男","data":1572429371605}  日期是毫秒值


(2)使用@JsonIgnore
person类中:(是在java对象类中的属性前加注解)
	private String name;
	private int age;
	private String gender;
	
	@JsonIgnore
	private Date data;

System.out.println(json);  
结果是:{"name":"张三","age":23,"gender":"男"} 把日期Date属性过滤掉了


(3)使用@JsonFormat(pattern="yyyy-MM-dd")
	private String name;
	private int age;
	private String gender;
	
	@JsonFormat(pattern="yyyy-MM-dd")
	private Date data;

System.out.println(json);   
结果是:{"name":"张三","age":23,"gender":"男","data":"2019-10-30"}  转换成了相应的格式

3、复杂java对象的转换
3.1 List :转化出来的是数组
3.2 Map:转化出来和对象格式一致

List练习:和不复杂的没区别

@Test
	public void test3() throws JsonProcessingException {
		//1.创建Person对象
		Person p=new Person();
		p.setName("张三");
		p.setAge(23);
		p.setGender("男");
		p.setDate(new Date());
		
		Person p1=new Person();
		p1.setName("李四");
		p1.setAge(23);
		p1.setGender("男");
		p1.setDate(new Date());
		
		Person p2=new Person();
		p2.setName("李四");
		p2.setAge(23);
		p2.setGender("男");
		p2.setDate(new Date());
		
		List<Person> list=new ArrayList<Person>();
		list.add(p);
		list.add(p1);
		list.add(p2);
		
		ObjectMapper mapper=new ObjectMapper();
		String json = mapper.writeValueAsString(list);
		System.out.println(json);

结果:[{"name":"张三","age":23,"gender":"男","data":"2019-10-30"},{"name":"李四","age":23,"gender":"男","data":"2019-10-30"},{"name":"李四","age":23,"gender":"男","data":"2019-10-30"}] 
	}

Map示例:

@Test
	public void test4() throws JsonProcessingException {
		
		Map<String, Object> map=new HashMap<String,Object>();
		map.put("name", "张三");
		map.put("age", 23);
		map.put("gender", "男");
		
		ObjectMapper mapper=new ObjectMapper();
		String json = mapper.writeValueAsString(map);
		System.out.println(json);
		
	}

结果:{"gender":"男","name":"张三","age":23}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值