-
package com.app.json; - import java.util.ArrayList;
- import java.util.Iterator;
- import java.util.List;
- import net.sf.json.JSONArray;
- import com.app.entity.duapp.Address;
- import com.google.gson.Gson;
- import com.google.gson.JsonArray;
- import com.google.gson.JsonElement;
- import com.google.gson.JsonObject;
- import com.google.gson.JsonParser;
- /**
- *@DEMO:napp
- *@Author:jilongliang
- *@Date:2013-7-20
- */
- public class JsonParse {
- private static Gson gson=new Gson();
- /**
- * 通过JsonLib把数组转换成Json数据
- * @param url
- * @throws Exception
- */
- private static JSONArray getArrayToJsonByJsonLib()throws Exception
- {
- JSONArray jsonArr=null;
- List<Address> lists=new ArrayList<Address>();
- for (int i = 1; i <=12; i++) {
- Address addr = new Address();
- addr.setProvince("第"+i+"个省份");
- addr.setCity("第"+i+"个城市");
- addr.setCityCode("130"+i);
- addr.setStreet("街道"+i);
- addr.setStreetNumber("街道号码"+i);
- lists.add(addr);
- }
- jsonArr = JSONArray.fromObject(lists); //把对象转换成Json对象
- return jsonArr;
- }
- public static void main(String[] args)throws Exception{
- getJsonGson();
- }
- /**
- * 利用Json-lib封装数组Json数据,Gson解析Json数据.
- * @throws Exception
- */
- private static void getJsonGson() throws Exception {
- //Json-lib的JSONArray数组对象
- JSONArray JsonArray =getArrayToJsonByJsonLib();
- String jsonData=JsonArray.toString();
- /*
- * 自己组装成一个json格式,格式必须为{,,}才能为JsonElement对象的parse方法解析不是否则
- * 会报错com.google.gson.JsonSyntaxException: java.io.EOFException: End of input at line 1 column 1307
- */
- String json="{status:1,address:"+jsonData+"}";
- // 创建一个JsonParser
- JsonParser parser = new JsonParser();
- JsonElement jsonEl = parser.parse(json);
- JsonObject jsonObj = null;
- jsonObj = jsonEl.getAsJsonObject();//转换成Json对象
- String status=jsonObj.get("status").getAsString();//status节点
- //System.out.println(status);
- JsonElement addressEl=jsonObj.get("address");//address节点
- if(addressEl.isJsonArray()){//判断是否为Json数组
- JsonArray jsonArray= addressEl.getAsJsonArray();//转为数组
- for(Iterator iter=jsonArray.iterator();iter.hasNext();){
- JsonObject obj=(JsonObject) iter.next();
- //String city=obj.get("city").getAsString();//方法一:根据key形势取值
- Address add=gson.fromJson(obj, Address.class);//方法二:灵活使用Gson取数据
- System.out.println(add.getProvince()+"\t"+add.getCity());
- }
- }
- }
- }
json数据是由运行JsonRead类可以生成
- {
- "info":
- {
- "users":{"username":"liangjilong","email":"jilongliang@sina.com","tel":"12396878","age":"25"},
- "address":{"street":"棠东","province":"广东省","district":"天河区","city":"广州市"}
- }
- }
JsonRead
- package com.app.json;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.StringReader;
- import java.util.HashMap;
- import java.util.Map;
- import com.google.gson.Gson;
- import com.google.gson.stream.JsonReader;
- /**
- *@DEMO:napp
- *@Author:jilongliang
- *@Date:2013-7-20
- */
- public class JsonRead {
- private static Gson gson=new Gson();
- /**
- * @param args
- */
- public static void main(String[] args) throws Exception{
- getJsonData();
- //方法二
- //String pathname="src/config/doc/json";
- //InputStream input = new FileInputStream(new File(pathname));
- //readJsonData(input,null);
- }
- /**
- * 组装Json数据
- * @throws Exception
- */
- private static void getJsonData() 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(null,json);
- }
- /**
- * 从文件读取json数据
- * @param in
- * @throws Exception
- */
- public static void readJsonData(InputStream in,String json) throws Exception {
- //JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
- JsonReader reader = new JsonReader(new StringReader(json));
- 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();
- }
- }
JsonObject jsonObject = new JsonParser().parse(mGsonString).getAsJsonObject(); String title = jsonObject.get("title").getAsString(); String my_ip_ = jsonObject.get("my_ip_").getAsString(); int recode = jsonObject.get("retcode_").getAsInt(); Log.d("mytest","title=" + title); Log.d("mytest","my_ip_=" + my_ip_); Log.d("mytest","recode=" + recode); Gson gson = new Gson(); JsonObject data = jsonObject.get("data").getAsJsonObject(); Set<Entry<String, JsonElement>> entrySet = data.entrySet(); for(Entry<String, JsonElement> type : entrySet){ JsonObject obj = data.getAsJsonObject(type.getKey()); ContactRoom cr = gson.fromJson(obj,ContactRoom.class); Log.d("mytest","type.getKey()=" + type.getKey()); Log.d("mytest","cr=" + cr.name + ":" + cr.svr_guid + ":" + cr.member); }
实体类:
- package com.app.entity.duapp;
- import java.io.Serializable;
- import com.google.gson.annotations.Expose;
- /**
- * 使用 new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
- * 创建Gson对象,没有@Expose注释的属性将不会被序列化
- * serialize序列化 默认 true
- * deserialize反序列化 默认 true
- *
- */
- public class Address implements Serializable{
- @Expose(serialize=false)// 序列化 /类已经序列化
- private String streetNumber;
- @Expose(deserialize=false)// 反序列化
- private String street;
- private String district;
- private String city;
- private String province;
- private String cityCode;
- 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;
- }
- }