我 们最常用的两个类就是 ?JSONObject和JSONArray这两个类,分别代表了json对象和json数组,这两个类都实现了 JSON 这个接口,下面我们通过几个小例子来看看如何将我们常见的几种数据格式转换成我们的json对象(我们一般称之为JSON数据的序列化)以及再将json 对象在转换成我们的数据格式(称之为反序列化)。
①简单的javabean的序列化和反序列化
public class Person
{
? ? private int id;
? ? private String name;
? ? private String address;
?
? ? public Person()
? ? {
? ? }
?
? ? 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 getAddress()
? ? {
? ? ? ? return address;
? ? }
?
? ? public void setAddress(String address)
? ? {
? ? ? ? this.address = address;
? ? }
? ? public Person(int id, String name, String address)
? ? {
? ? ? ? super();
? ? ? ? this.id = id;
? ? ? ? this.name = name;
? ? ? ? this.address = address;
? ? }
? ? @Override
? ? public String toString()
? ? {
? ? ? ? return "Person [id=" + id + ",, address=" + address
? ? ? ? ? ? ? ? + "]";
? ? }
}
首先我们定义一个简单的javabean对象,然后将一个Person对象转换成json对象,然后再将这个json对象反序列化成我们的Person对象。
我们先定义一个JsonTools类,这个类有两个静态方法,我们可以通过这两个方法来得到一个JSON类型的字符串对象,以及一个JSON对象
public class JsonTools
{
? ? /**
? ? ?* 得到一个json类型的字符串对象
? ? ?* @param key
? ? ?* @param value
? ? ?* @return
? ? ?*/
? ? public static String getJsonString(String key, Object value)
? ? {
? ? ? ? JSONObject jsonObject = new JSONObject();
? ? ? ? //put和element都是往JSONObject对象中放入 key/value 对
// ? ? ? ?jsonObject.put(key, value);
? ? ? ? jsonObject.element(key, value);
? ? ? ? return jsonObject.toString();
? ? }
? ??
? ? /**
? ? ?* 得到一个json对象
? ? ?* @param key
? ? ?* @param value
? ? ?* @return
? ? ?*/
? ? public static JSONObject getJsonObject(String key, Object value)
? ? {
? ? ? ? JSONObject jsonObject = new JSONObject();
? ? ? ? jsonObject.put(key, value);
? ? ? ? return jsonObject;
? ? }
? ??
}
我 们可以直接通过?JSONObject jsonObject = new JSONObject(); 这个方法就可以得到一个json对象,然后通过element()或者是put()方法来给我们的json对象添加key/value对。我们先来看看第 一个例子,实现一个简单的Person对象和json对象的转换
?????Person?person?=?new?Person(1,?"xiaoluo",?"广州");????????//????将Person对象转换成一个json类型的字符串对象 ????????String?personString?=?JsonTools.getJsonString("person",?person); ????????System.out.println(personString.toString());我们看看控制台的输出:
、
{"person":{"address":"广州","id":1,"name":"xiaoluo"}}整个外面的大括号是一个json对象,里面有一对key/value,其中里面的{"address":"广州","id":1,"name":"xiaoluo"}就是我们转换成的json字符串对象
再来看看如何将json对象转换成我们的bean对象
?JSONObject?jsonObject?=?JsonTools.getJsonObject("person",?person);????????//????通过JSONObject的toBean方法可以将json对象转换成一个javabean ????????JSONObject?personObject?=?jsonObject.getJSONObject("person"); ????????Person?person2?=?(Person)?JSONObject.toBean(personObject,?Person.class); ????????System.out.println(person2); Person?[id=1,?name=xiaoluo,?address=广州]②转换List<Person>类型的对象
、
@Test
? ? public void testPersonsJson()
? ? {
? ? ? ? List<Person> persons = new ArrayList<Person>();
? ? ? ? Person person = new Person(1, "xiaoluo", "广州");
? ? ? ? Person person2 = new Person(2, "android", "上海");
? ? ? ? persons.add(person);
? ? ? ? persons.add(person2);
? ? ? ? String personsString = JsonTools.getJsonString("persons", persons);
? ? ? ? System.out.println(personsString);
? ? ? ??
? ? ? ? JSONObject jsonObject = JsonTools.getJsonObject("persons", persons);
? ? ? ? // ? ?List<Person>相当于一个JSONArray对象
? ? ? ? JSONArray personsArray = (JSONArray)jsonObject.getJSONArray("persons");
? ? ? ? List<Person> persons2 = (List<Person>) personsArray.toCollection(personsArray, Person.class);
? ? ? ? System.out.println(persons2);
? ? }
{"persons":[{"address":"广州","id":1,"name":"xiaoluo"},{"address":"上海","id":2,"name":"android"}]} [Person?[id=1,?name=xiaoluo,?address=广州],?Person?[id=2,?name=android,?address=上海]]③List<Map<String, String>>类型的json对象转换
@Test
? ? public void testMapJson()
? ? {
? ? ? ? List<Map<String, String>> list = new ArrayList<Map<String, String>>();
? ? ? ? Map<String, String> map1 = new HashMap<String, String>();
? ? ? ? map1.put("id", "001");
? ? ? ? map1.put("name", "xiaoluo");
? ? ? ? map1.put("age", "20");
? ? ? ? Map<String, String> map2 = new HashMap<String, String>();
? ? ? ? map2.put("id", "002");
? ? ? ? map2.put("name", "android");
? ? ? ? map2.put("age", "33");
? ? ? ? list.add(map1);
? ? ? ? list.add(map2);
? ? ? ? String listString = JsonTools.getJsonString("list", list);
? ? ? ? System.out.println(listString);
? ? ? ??
? ? ? ? JSONObject jsonObject = JsonTools.getJsonObject("list", list);
? ? ? ? JSONArray listArray = jsonObject.getJSONArray("list");
? ? ? ? List<Map<String, String>> list2 = (List<Map<String, String>>) listArray.toCollection(listArray, Map.class);
? ? ? ? System.out.println(list2);
? ? }
{"list":[{"id":"001","age":"20","name":"xiaoluo"},{"id":"002","age":"33","name":"android"}]} [{id=001,?name=xiaoluo,?age=20},?{id=002,?name=android,?age=33}]通过上面的例子,我们可以了解了如何通过json-lib这个解析库来实现javabean、List、Map等数据和json数据的互相转换
2.gson()
下面我们来看看Google提供的gson这个json解析库,同样我们需要去下载gson这个jar包,导入到我们的项目中