JSON是一种与开发语言无关的、轻量级数据格式,是比较常用的一种工具。英文全写JavaScript Object Notation。
优点:易于人的阅读和编写,易于程序解析与生成。
标准的json数据表示
数据结构:Object,Array
基本类型:string,number,true,false,null
Object:使用花括号{}包含的键值对结构,Key必须是string类型的,value为任何基本类型或数据结构。
Array:使用中括号[]包括,用逗号来分隔元素。
下面是一个exam:
{
"name" : "张三",
"age" : 18,
"education" : true,
"car" null,
"friend":["李四","王五"],
}
下面开始介绍json在java中的应用
JSON官网:http://www.json.org.cn/
java中用于解释json的主流工具有org.json、json-lib与gson,本文介绍gson的应用
首先创建一个学生类Student,用于存放实体信息。
public class Student {
private int id;
private String name;
private String sex;
private int age;
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;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Student(int id, String name, String sex, int age) {
super();
this.id = id;
this.name = name;
this.sex = sex;
this.age = age;
}
public Student() {
super();
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + ", sex=" + sex
+ ", age=" + age + "]";
}
}
然后可以通过Gson的toJson方法生成json串,我这里生成的是一个ArrayList<Student>
ArrayList<Student> stus = new ArrayList<Student>();
for (int i = 1; i <= 30; i++) {
stus.add(new Student(i, "sss", "M", 19));
}
String json = new Gson().toJson(stus);
当然了,解析也很方便~
Student[] stus = new Gson().fromJson(json, cls);
ArrayList<Student> list = Arrays.asList(stus);
但是,你开发的时候难道每个实体都要写这句话么?!NONONO,作为一个程序猿,我们首先要学会的是什么,代码复用!!敲黑板!!减小代码量,提高代码可读性才是我们的追求,下面我们来讲怎么用泛型来减小工作压力!直接上代码!
public class JsonUtils {
public static <T> T getData(String json, Class<T> cls) {
T data = null;
try {
data = new Gson().fromJson(json, cls);
} catch (JsonSyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return data;
}
public static <T> List<T> getList(String json, Class<T[]> cls) {
List<T> list = null;
try {
T[] t = new Gson().fromJson(json, cls);
list = Arrays.asList(t);
} catch (JsonSyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return list;
}
}
这份代码想必大家都能看懂,经过如此优化,再用起来就方便啦~
ArrayList<Student> list = JsonUtil.getList(json , Student.class);
当然了,创建JSON串的时候也可以用Object进行封装一下,类似下面这样
public static String createJsonString(Object value) {
Gson gson = new Gson();//如果用的多的话,可以作为类变量,不用多次声明
String str = gson.toJson(value);
return str;
}
我觉得这次就到此位置,大家可以根据我的文章结合自己代码的实际情况进行改进,以后如果找到更好的技巧再加进来,谢谢大家阅读~