package com.app.json; import java.io.IOException; import java.util.HashMap; import java.util.Map; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.google.gson.internal.bind.JsonTreeReader; import com.google.gson.stream.JsonReader; /** *@DEMO:napp *@Author:jilongliang *@Date:2013-7-21 */ public class GsonTreeReader { private static Gson gson = new Gson(); public static void main(String[] args) throws Exception { /** * 组装address对象的数据 */ Map<String, String> address = new HashMap <String, String>(); address.put("province", "广东省"); address.put("city", "广州市"); address.put("district", "天河区"); address.put("street", "棠东"); /** * 组装users对象的数据 */ Map<String, String> users = new HashMap <String, String>(); users.put("username", "liangjilong"); users.put("age", "25"); users.put("tel", "12396878"); users.put("email", "jilongliang@sina.com"); Map<Object, Object> listsObj = new HashMap <Object, Object>(); listsObj.put("address",address);//address节点 listsObj.put("users",users);//users节点 Object obj=listsObj;//转换成对象 Map<Object, Object> info = new HashMap <Object, Object>(); info.put("info", obj);//json的根节点 String json=gson.toJson(info);//转换成json数据 System.out.println(json);//打印json数据 readJsonData(json); } /**JsonReader * JsonTreeReader从文件读取json数据 * @param in * @throws Exception */ public static void readJsonData(String json) throws Exception { //创建JsonParser对象 JsonParser parser = new JsonParser(); JsonElement jsonEl = parser.parse(json); //创建一个JsonTreeReader对像用JsonReader JsonReader reader = new JsonTreeReader(jsonEl); try { reader.beginObject(); String tagName = reader.nextName(); if (tagName.equals("info")) { readInfo(reader); } reader.endObject(); } finally { reader.close(); } } /** * 读取json的父(根,第一个)节点 * @param reader * @throws Exception */ public static void readInfo(JsonReader reader) throws Exception { reader.beginObject(); while (reader.hasNext()) { String tagName = reader.nextName(); if (tagName.equals("address")) { readAddress(reader); } else if (tagName.equals("users")) { readUsers(reader); } } reader.endObject(); } /** * 读取用户信息值 * @param reader * @throws IOException */ public static void readUsers(JsonReader reader) throws IOException { reader.beginObject(); while (reader.hasNext()) { String tag = reader.nextName(); if (tag.equals("username")) { String username = reader.nextString(); System.out.println("用户名:" + username); } else if (tag.equals("email")) { String email = reader.nextString(); System.out.println("Email:" + email); } else if (tag.equals("tel")) { String tel = reader.nextString(); System.out.println("电话:" + tel); }else if (tag.equals("age")) { String age = reader.nextString(); System.out.println("年龄:" + age); } else { reader.skipValue();//忽略值/跳过break } } reader.endObject(); } /** * 读取地区值 * @param reader * @throws IOException */ public static void readAddress(JsonReader reader) throws IOException { reader.beginObject(); while (reader.hasNext()) { String tag = reader.nextName(); if (tag.equals("province")) { String province = reader.nextString(); System.out.println("省份:" + province); } else if (tag.equals("city")) { String city = reader.nextString(); System.out.println("街道:" + city); } else if (tag.equals("street")) { String street = reader.nextString(); System.out.println("街道:" + street); }else if (tag.equals("district")) { String district = reader.nextString(); System.out.println("区:" + district); } else { reader.skipValue();//忽略值/跳过break } } reader.endObject(); } }
?
package com.app.entity.duapp; import java.io.Serializable; import com.google.gson.annotations.Expose; /** * Gson gson=new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); * 创建Gson对象,没有@Expose注释的属性将不会被序列化 * serialize序列化 默认 true * deserialize反序列化 默认 true */ public class Address implements Serializable{ @Expose(serialize=false)// 序列化 /Address类已经序列化 private int id; @Expose(deserialize=false)// 反序列化 private String country;//国家 private String province;//省份 private String city;//城市 private String street;//街道 private String district;//地区 private String cityCode;//邮政编码 private String streetNumber;//街道号 public Address() { } public Address(int id,String country) { this.id=id; this.country=country; } public String getCityCode() { return cityCode; } public void setCityCode(String cityCode) { this.cityCode = cityCode; } public String getStreetNumber() { return streetNumber; } public void setStreetNumber(String streetNumber) { this.streetNumber = streetNumber; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getDistrict() { return district; } public void setDistrict(String district) { this.district = district; } public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getProvince() { return province; } public void setProvince(String province) { this.province = province; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCountry() { return country; } public void setCountry(String country) { this.country = country; } }
?