Gson 是 Google 发布的 JSON 解析工具, 非常好用, 项目里用到 JSON 解析, 无非两种情况: 对象转化为 JSON 或 JSON 转化为对象. 下面的代码演示了这两种情况下, Gson工具的使用, 要注意, 下面的示例代码中, JSON 字符串中的 key 和 JavaBean 中的字段是一样的, 也可以不一样, 后面会说.
/**
* Gson 的使用
* @author Gaoyuan4122
*
*/
public class TestGson {
private Gson gson;
@Before
public void before() {
gson = new Gson();
}
/**
* 数据放进数组或List转化为json
* ["aaa","bbb","ccc"]
* ["gaoyuan1","gaoyuan2","gaoyuan3"]
* @throws Exception
*/
@Test
public void testToJson1() throws Exception {
String[] ss = new String[]{"aaa","bbb","ccc"};
String json = gson.toJson(ss);
System.out.println(json);
List<String> list = new ArrayList<String>();
list.add("gaoyuan1");
list.add("gaoyuan2");
list.add("gaoyuan3");
String json2 = gson.toJson(list);
System.out.println(json2);
}
/**
* 数据放进Map中转化为json
* {"age":"22","name":"gaoyuan"}
* @throws Exception
*/
@Test
public void testToGson2() throws Exception {
Map<String, String> map = new HashMap<String,String>();
map.put("name", "gaoyuan");
map.put("age", "22");
String json = gson.toJson(map);
System.out.println(json);
}
/**
* List<Map<String,String>> 转化为json
* [{"age":"22","name":"gaoyuan"},{"age":"23","name":"gaoyuan3"}]
* @throws Exception
*/
@Test
public void testToGson3() throws Exception {
List<Map<String,String>> list = new ArrayList<Map<String,String>>();
Map<String, String> map = new HashMap<String,String>();
map.put("name", "gaoyuan");
map.put("age", "22");
Map<String, String> map2 = new HashMap<String,String>();
map2.put("name", "gaoyuan3");
map2.put("age", "23");
list.add(map);
list.add(map2);
String json = gson.toJson(list);
System.out.println(json);
}
/**
* 使用gson中提供的JsonObject创建json
* {"response":"error","message":"用户名不存在"}
*/
@Test
public void testToGson4() throws Exception{
JsonObject jo = new JsonObject();
jo.addProperty("response", "error");
jo.addProperty("message", "用户名不存在");
String json = gson.toJson(jo);
System.out.println(json);
}
/**
* List里放复杂对象转化为json
* User有三个普通属性, 以及一个Address对象属性
* [{"username":"gaoyuan","password":"111","age":22,"address":{"id":1,"name":"henan"}},{"username":"gaoyuan2","password":"222","age":23,"address":{"id":2,"name":"henan2"}}]
* @throws Exception
*/
@Test
public void testToGson5() throws Exception{
List<User> users = new ArrayList<User>();
users.add(new User("gaoyuan", "111", 22, new Address(1, "henan")));
users.add(new User("gaoyuan2", "222", 23, new Address(2, "henan2")));
String json = gson.toJson(users);
System.out.println(json);
}
/**
* Map<String,List<Object>> 转json
* {"response":"topic","price":100.0,"topic_list":[{"id":1,"name":"sdf","pic":"http://xxx"},{"name":"hehe","pic":"adfafdasf"}]}
* @throws Exception
*/
@Test
public void testToGson6() throws Exception {
Map map = new HashMap();
map.put("response", "topic");
List list = new ArrayList();
list.add(new Topic(1,"sdf","http://xxx"));
Topic topic2 = new Topic();
topic2.setName("hehe");
topic2.setPic("adfafdasf");
list.add(topic2);
map.put("topic_list", list);
map.put("price", 100.0f);
String json = gson.toJson(map);
System.out.println(json);
}
/**
* 从json中获取需要的部分
* {"response":"help","helplist":[{"id":1,"title":"购物指南"},{"id":2,"title":"配送方式"},{"id":3,"title":"售后服务"},{"id":6,"title":"测试三"}],"version":"12"}
* 要获取 helplist
* [{"id":1,"title":"购物指南"},{"id":2,"title":"配送方式"},{"id":3,"title":"售后服务"},{"id":6,"title":"测试三"}]
* @throws Exception
*/
@Test
public void testFromGson1() throws Exception {
String json = "{\"response\":\"help\",\"helplist\":[{\"id\":1,\"title\":\"购物指南\"},{\"id\":2,\"title\":\"配送方式\"},{\"id\":3,\"title\":\"售后服务\"},{\"id\":6,\"title\":\"测试三\"}],\"version\":\"12\"}";
JsonObject fromJson = gson.fromJson(json, JsonObject.class);
JsonObject jsonObj = (JsonObject) fromJson.get("helplist");
System.out.println(jsonObj.toString());
}
/**
* json转对象
* {"id":1,"title":"购物指南"} 转为 Topic对象
* @throws Exception
*/
@Test
public void testFromGson2() throws Exception {
String json = "{\"id\":1,\"title\":\"购物指南\"}";
Topic topic = gson.fromJson(json, Topic.class);
System.out.println(topic);
}
/**
* 从json中获取想要的部分, 并转化为List中的对象
*
{
"response": "topic",
" topic ": [
{
"id": "专题活动ID",
"name": "专题活动名称",
"pic": "图片URL"
},
{
"id": "专题活动ID",
"name": "专题活动名称",
"pic": "图片URL"
}
]
}
*
* @throws Exception
*/
@Test
public void testFromGson3() throws Exception {
String json = "{\"response\":\"topic\",\"topic\": [{\"id\": \"专题活动ID\",\"name\": \"专题活动名称\",\"pic\": \"图片URL\"},{ \"id\": \"专题活动ID\", \"name\": \"专题活动名称\", \"pic\": \"图片URL\" }]}";
JsonObject jsonObj = gson.fromJson(json, JsonObject.class);
Type type = new TypeToken<List<Topic>>(){}.getType();
List<Topic> topics = gson.fromJson(jsonObj.get("topic"), type);
System.out.println(topics);
}
@After
public void after() {
gson = null;
}
}
对应的 JavaBean 这里就不再给出了.
如果 JSON 字符串中的 key 和 JavaBean 对象中的字段不一样, 需要在 JavaBean 的字段上加一个注解:
@SerializedName("user_id")
private int userId;
加了这个注解之后, JSON 和 JavaBean 的互相转化就会按照注解配置的进行了.
除此之外, 还有一些常用的方法:
// 将 JSON 字符串转化为一个 JsonElement, 在 Gson 中所有的 JSON 元素都是 JsonElement, 有四个子类: JsonArray, JsonNull,
// JsonObject, JsonPrimitive, 前面三个比较常用.
JsonElement jsonElement = new JsonParser().parse(jsonStr);
// 判断 JsonElement 是否为 JsonArray
if (jsonElement.isJsonArray()) {
// ...
}
// 将 JsonElement 转化为 JsonArray
JsonArray jsonArray = element.getAsJsonArray();
// 将 JsonElement 转化为 JsonObject
JsonObject fontsObject = jsonElement.getAsJsonArray().get(1).getAsJsonObject();
// 获取 JsonElement 的值, 注意这个方法和toString返回的是不同的.
jsonArray.get(0).getAsString()
基本的用法就是这些, 还可以参考如下博客:
http://blog.csdn.net/lk_blog/article/details/7685169