今天学习下java里,对json数据的处理,之前了解过,但是,sun公司之前的一个jar包好像对此确实支持的不够。经了解常用的有gson,jkson这2套技术。今天就抽空学习下gson.
前提环境:
1.导入gson-2.2.2.jar;
2.jdk1.6
3.java bean:Address.java,Student.java
package com.wds.json;
import java.io.Serializable;
public class Address implements Serializable{
private String country;
private String province;
private String city;
private String area;
private String street;
private String no;
public Address() {
super();
}
public Address(String city, String area, String street, String no) {
super();
this.city = city;
this.area = area;
this.street = street;
this.no = no;
}
public Address(String country, String province, String city, String area,
String street, String no) {
super();
this.country = country;
this.province = province;
this.city = city;
this.area = area;
this.street = street;
this.no = no;
}
//setter/getter
}
Student.java
package com.wds.json;
import java.io.Serializable;
import java.util.Date;
public class Student implements Serializable{
private int id;
private double height;
private String name;
private Date birth;
private boolean ismarried;
private Address address;
public Student() {
super();
}
public Student(String name, Date birth, Address address) {
super();
this.name = name;
this.birth = birth;
this.address = address;
}
public Student(int id, double height, String name, Date birth,
boolean ismarried, Address address) {
super();
this.id = id;
this.height = height;
this.name = name;
this.birth = birth;
this.ismarried = ismarried;
this.address = address;
}
//setter/getter
}
1.java对象到json字符串的转换:
Address addr = new Address( "yinchuan", "jinfeng", "shengli", "1132");
Gson gson = new Gson();
String json = gson.toJson(addr);
System.out.println("addr = "+json);
2.json字符串到java对象:
String json = "{\"city\":\"yinchuan\",\"area\":\"jinfeng\",\"street\":\"shengli\",\"no\":\"1132\"}";
Gson gson = new Gson();
Address addr = gson.fromJson(json, Address.class);
System.out.println("addr = "+addr);
System.out.println("addr = "+addr.getCity());
System.out.println("addr = "+addr.getArea());
System.out.println("addr = "+addr.getStreet());
System.out.println("addr = "+addr.getNo());
System.out.println("addr = "+addr.getCountry());
3.list到json:
Gson gson = new Gson();
List li = new ArrayList();
li.add("ab");
li.add("bc");
li.add("cd");
li.add("de");
String json = gson.toJson(li);
System.out.println("li = "+json);
4.泛型list到json:
Gson gson = new Gson();
List<Student> students = new ArrayList<Student>();
students.add(new Student("zs",new Date(),new Address("yinchuan", "jinfeng", "shengli", "1132")));
students.add(new Student("ww",new Date(),new Address("wuhan", "jinfeng", "shengli", "1132")));
students.add(new Student("ll",new Date(),new Address("shanghai", "jinfeng", "shengli", "1132")));
String json = gson.toJson(students);
System.out.println("students = "+json);
5.json list字符串转泛型list:
List<Student> retList = gson.fromJson(json, new TypeToken<List<Student>>(){}.getType());
for (Student stu : retList) {
System.out.println(stu);
}
下面小结一下:
其实我们的实现只依赖一个Gson对象:
Gson gson = new Gson();
java数据对象转json字符串:
String json = gson.toJson(array);
String json = gson.toJson(obj);
String json = gson.toJson(set);
String json = gson.toJson(list);
String json = gson.toJson(map);
json字符串转java数据对象:
//json --> obj
Address addr = gson.fromJson(json, Address.class);
//json --> list
List<Student> retList = gson.fromJson(json, new TypeToken<List<Student>>(){}.getType());
在测试探究中:我还发现:如果有个json字符串的属性很多,但是,我们需要的属性只有若干的几个,那么我们可以根据需要进行实体bean的定义,这样我们也可以直接从json字符串提取出我们需要的实体bean。
就先这样,下一篇再深入了解其他的数据处理。