json简介
json的全称是JavaScript Object Notation,是一种数据交换格式,独立于编程语言,可以用来存储数据,优点是非常利于人类阅读和编写,同时也利于机器的解析和生成,同时还可以提升网络传输效率。 json的数据格式是以名-值对的方式存储的,可以将其看做是一个字符串,下面就是一个json格式的数据,对象会放到{}中,数组放到[]中:
对象:
{"name":"monkey1024","age":18,"hobby":"java"}
数组:
[{"name": "张三", "age": 23, "gender": true},
{"name": "李四", "age": 24, "gender": true},
{"name": "王五", "age": 25, "gender": false}]
在json中规定的字符编码时utf-8,几乎所有的编程语言都有解析json数据的第三方库,因此json的应用非常多。在servlet中可以将要返回给前台的数据封装为json格式,在前台中可以使用javascript来解析,javascript已经内置了json的解析。
在javascript中创建json对象:
<script type="text/javascript">
//创建一个json对象
let student = {"name":"jack","age":18};
console.log(student.name);
//创建一个数组,数组中存放json对象
let animal = [{"name":"monkey","count":10},{"name":"tiger","count":5}];
console.log(animal[0].name);
</script>
通过上面示例可以看出在javascript中使用json非常方便。
json格式的数据是跟语言无关的,在java中也有非常多的第三方库可以解析json格式的数据,常用的有:
- fastjson:国人开发的,是目前java语言中最快的json库
- gson:google开发
- jackson:Tatu Saloranta开发
下面以fastjson为例看下,fastjson相关jar包下载地址:http://pan.baidu.com/s/1jIagJII
fastjson中常用的方法:
- JSON.toJSONString
将JavaBean转成json格式的字符串
- JSON.parseObject
将json格式的字符串转换为JavaBean
代码示例:
创建一个City类,表示城市:
package com.monkey1024.bean;
/**
* 城市
*
*/
public class City {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
创建一个Province类表示省份:
package com.monkey1024.bean;
import java.util.List;
/**
* 省份
*
*/
public class Province{
private String name;
private List<City> cities;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<City> getCities() {
return cities;
}
public void setCities(List<City> cities) {
this.cities = cities;
}
}
fastjson测试类:
package com.monkey1024.test;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.JSON;
import com.monkey1024.bean.City;
import com.monkey1024.bean.Province;
public class JsonTest {
public static void main(String[] args) {
City c1 = new City();
c1.setId(1005);
c1.setName("石家庄");
City c2 = new City();
c2.setId(1006);
c2.setName("唐山");
City c3 = new City();
c3.setId(1007);
c3.setName("保定");
List<City> cities = new ArrayList<>();
cities.add(c1);
cities.add(c2);
cities.add(c3);
Province hebei = new Province();
hebei.setName("河北");
hebei.setCities(cities);
//将Province对象转换为json格式并返回字符串
String hebeiString = JSON.toJSONString(hebei);
System.out.println(hebeiString);
//将json格式的字符串转换为Province对象
Province hebeiNew = JSON.parseObject(hebeiString, Province.class);
System.out.println(hebeiNew.getName());
}
}
使用json进行数据传输
将百度下拉提示框中的代码改成使用json格式进行数据传输。 将SearchServlet类中的doGet方法修改为下面内容:
// 根据用户输入的数据去查询数据库,这里省略数据库查询操作,手动编写一个List结果集
List<String> result = new ArrayList<>();
result.add("m1");
result.add("m2");
result.add("m3");
result.add("m4");
result.add("m5");
//将List转换为string类型
String str = JSONArray.toJSONString(result);
// 把数据响应到客户端
response.getWriter().write(str);
因为servlet中返回了一个JSON字符串,所以需要在javascript中将该字符串转换为JSON类型,因此将前台代码中的删掉:
let result = str.split(",");
将$.ajax中的参数dataType的值改成”json”,这样后台就能直接以json格式接收后台返回的数据了。此时直接遍历回调函数的参数data即可
由此可见使用json进行数据传输时可以减少开发者的操作并且提高系统的运行效率(之前需要遍历list并进行拼接)。
相关文章
本站已关闭游客评论,请登录或者注册后再评论吧~