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
时间: 2024-11-08 18:53:25