Json对象学习
JSON对象 : JavaScript 对象表示法
一、定义格式;
var 对象名 = {
属性名:属性值,
属性名:属性值,
.........
}
* JSON 是存储和交换文本信息的语法,类比与xml, 进行数据的传输
JSON 比 XML 更小、更快,更易解析
● JavaScript 程序能够使用内建的 eval() 函数,用 JSON 数据来生成原生的 JavaScript 对象。
二、JSON的语法
● 1、基本规则:
* 数据以键值对的方式进行存储: json数据是由键值对构成的
* 键用引号(单双都行)引起来,也可以不使用引号
* 值的取值类型
(1)数字(整数或浮点数)
(2)字符串
(3)逻辑值(true 或 false)
(4)数组(在方括号中) [ {} ,{}, {} ]
(5)对象(在花括号中) { }
(6)null
* 数据之间由逗号分隔,多个键值对用逗号分隔
* 花括号保存对象:使用{}定义json格式
* 方括号保存数组:[]
● 2、获取数据
(1)json对象.键名
(2)json对象["键名"]
(3)json对象[索引] //获取到当前的数组对象object,再使用 .键名 , 获取具体值
● 3、获取对象中的所有键和值
* 例如:
var person = {"name":"caddo",age:21,'gebder':true};
* 使用 for in 循环
for(var key in person) {
//这样的方式获取不到因为此方式相当于: person."name"
//alert(key+":"+person.key); (错误格式)
alert(key+":"+person[key]); (正确格式)
}
● 4、JSON数据和java对象的相互转换
* JSON解析器
* 常见的解析器: jsonlib, Gson , fastjson
(1)JSON转换为java对象 (使用jackson架包转换)
* 使用步骤:
(1)导入jackson的相关jar包
(2)创建json对象
* 自动转译“”号
* String json = "{\"name\": \"caddo\",\"age\":21 ,\"gender\": \"女\" }";
(3)创建jackson的核心对象
(4)转换:
* 转换方法:
readValue(参数,class对象)
参数:
json对象
class对象: 代表要转的对象的clss对象
* 结果:
Person{name='张三',age=21, gender='男'};
(2)java对象转换为JSON对象 (使用jackson架包转换)
* 使用步骤:
(1)导入jackson的相关jar包
(2)创建java对象
(3)创建jackson的核心对象, ObjectWapper mapper = new ObjectWapper();
(4)转换:
* 转换方法:
wirteValue(参数,obj)
参数:
file: 将obj对象转换为json字符串对象,并且保存在文件中
writer: 将obj对象转换为json字符串对象,并且写入到字符输出流中
OutPutStream: 将obj对象转换为json字符串对象,并且写入到字节输出流中
writeValueAsString: 将对象转换为json字符串
* 注解:
@JsonIgnore: 排除属性(忽略该属性,也就是转成json字符串不会出现对应的键值对)
@JsonFormat: 属性值格式化
@JsonFormat(pattern="yyyy-MM-dd");
* 复杂的java对象转换
● List集合 : 数组
* 转换后的格式:
[{},{},{}];
* 每一个{} 代表的是一个对象,或者字符串
● Map集合
* 转换后的格式:
{"键名1":"键值1" ,"键名2":"键值2" ,"键名3":"键值3" };
* 转换后的数据键是无序的,与集合初始添加的顺序是不一致的
● 5、定义JSON格式案列
//1、定义基本格式
var person = {"name":"caddo",age:21,'gebder':true};
//alert(person); //结果: [object Object]
var name = person.name;
alert(name); //结果: caddo
//获取person对象的所有键和值,使用for in 循环 ,key是一个关键字
for(var key in person) {
alert(key+":"+person[key]);
}
//2、嵌套格式{} ——-》 [] 键: persons , 值:保存的是数组对象
var persons = {"persons":[
{"name":"caddo",age:21,'gender':true} ,
{"name":"elina",age:21,'gender':false},
{"name":"sea",age:22,'gender':true}
] };
//alert(persons); // 结果 : [object Object]
var name1 = persons.persons[1].name;
alert(name1); //结果:elina
//3、嵌套格式 [] ----> {}
var ps = [ {"name":"caddo",age:21,'gender':true} ,
{"name":"elina",age:21,'gender':false},
{"name":"sea",age:22,'gender':true} ]
//alert(ps); // 结果[object Object],[object Object],[object Object]
var gender = ps[0].gender;
alert(gender); // 结果: true
● 6、JSON与java对象之间的转换案例
* 服务器端响应的数据:在客户端使用时,要想当成json数据格式使用
(1)$.get(type) : 将最后一个参数type指定为"json"
(2)在服务器端设置MIME类型
response.setContentType("application/json;charset=utf-8")