Gson是一个开源的java库,项目主页http://code.google.com/p/google-gson/。其可以把一个java对象转换成json格式,也可以把一个json格式的字符串,转换成一个对象,虽然其介绍上说这样转换可以,偶亲测没有成功,也许是个bug了,不过一般把对象转换成字符以及对json格式的数据进行解析这些功能已经完全够用了,而且其还支持java的泛型对象,比如HashMap,ArrayList等
那么什么是json呢,参见 http://www.json.org/json-zh.html官方对其的介绍,在这里就不罗嗦了,简单的说其就是一种JavaScript的数据交换格式。
json其中有两个类非常有用且常用,一个是Gson,另一个是JsonParser,前者提供了把java对象转换成json格式字符串的功能,后者则负责解析Json格式数据,看如下源码
-----------------------------------------------------------
这是个简单的对象,其中包含两个字符类型,和一个double类型的数据
public class Employee {
String name = "Jone";
double salary = 1000;
String sex = "M";
public Employee() {
}
}
使用Gson把该对象转换成json格式数据
Gson gson = new Gson();//初始gson对象
String json = gson.toJson(new Employee());//调用Gson的方法toJson把对象转换
System.out.print(json);
输出json的数据格式如下
{"name":"Jone","salary":1000.0,"sex":"M"}
-----------------------------------------------------------
再看一个java内置对象HashMap的例子
HashMap map = new HashMap();//初始化一个map对象
map.put("name", "Tom"); //存入数据
map.put("salary", 1000);
map.put("sex", "M");
Gson gson = new Gson();
String json = gson.toJson(map); //开始转换
System.out.print(json);
输出结果如下
{"sex":"M","name":"Tom","salary":1000}
如此简单!
-----------------------------------------------------------
接下来再看该库提供的解析json的功能
首先定义如下的json数据,其中name是个json数组
String json = "{/"name/":[/"Jone/",/"Tom/",/"Jim/",/"Jerry/"],/"manager/":/"Jone/"}";
JsonParser jsonparer = new JsonParser();//初始化解析json格式的对象
//JsonArray是该库提供的存放解析后的Json数组的对象,首先调用JsonParser的getAsJsonObject的方法把
//字符串转换为该库专用的json 的对象
//然后再调用json对象的getAsJsonArray方法得到一个name的json格式数组,参数为json格式数据中的数组名
JsonArray jsonarray = jsonparer.parse(json).getAsJsonObject().getAsJsonArray("name");
//接下来,打印该数组中的内容
for(int i=0;i<jsonarray.size();i++)
{
String name= jsonarray.get(i).getAsString();
System.out.println(name);
}
结果如下
Jone
Tom
Jim
Jerry
如果想得到键manager的内容如下
jsonparer.parse(json).getAsJsonObject().get("manager").getAsString()
注意:JsonObject的方法get(“manager”)是得到一个JsonElement元素,然后再调用该元素的getAsString()方法得到及键值,如果不调用getAsString()方法,输出结果如下”Jone”是加引号的