【第21篇】通过Gson去把字符串转成json,对象转成Json,数组转换成Json处理Json数据

来源:互联网 发布:c语言高级 编辑:程序博客网 时间:2024/05/16 13:48
package ivyy.taobao.com.domain.gson;import ivyy.taobao.com.entity.Address;import ivyy.taobao.com.utils.GlobalConstants;import ivyy.taobao.com.utils.HttpRequestUtils;import ivyy.taobao.com.utils.IoUtils;import java.lang.reflect.Type;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;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;import com.google.gson.reflect.TypeToken;@SuppressWarnings("all")/** *@Date:2015-1-5 *@Author:liangjilong *@Email:jilongliang@sina.com *@Version:1.0 *@Description: */public class JsonMap {private static Gson gson=new Gson();//jsonmap.json文件public static void main(String[] args) throws Exception {//也可以从jsonmap.json通过文件流读取//setDataByGson();//getDataByGson("URL");getDataByGson("FILE");//getStrToJsonByGson();//getObjectToJsonByGson();//getArrayToJsonByGson();///////////////////////////////////}/** * ByGson把字符串转换成Json数据 * @throws Exception */private static void getStrToJsonByGson()throws Exception{//String jsonStr="{\"city\":\"广州市\",\"province\":\"广东省\"}"; //这本身是json数据,也是字符串! String jsonStr="{city:广州市,province:广东省}";  Address addr =gson.fromJson(jsonStr,Address.class);//把字符串转换成Json String json=gson.toJson(addr);//把对象转换成json System.out.println(json); System.out.println(addr.getProvince()+"\t"+addr.getCity());}/** * Gson结合反射对象,把对象转换成Json数据 * @throws Exception */private static void getObjectToJsonByGson()throws Exception{ Address addr = new Address();  addr.setProvince("广东省"); addr.setCity("广州市"); String json=gson.toJson(addr);//把对象转换成Json //创建一个JsonParser对象 //JsonParser parser = new JsonParser();   //创建一个JsonElement对象         //JsonElement jsonEl = parser.parse(json);   Type type = new TypeToken<Address>(){}.getType();//通过反射 Address add= gson.fromJson(json,type); //Address add= gson.fromJson(jsonEl,type); System.out.println(add.getProvince()+"\t"+add.getCity());}/** * 通过Gson把数组转换成Json数据 * @param url * @throws Exception */private static void getArrayToJsonByGson()throws Exception{List<Address> lists=new ArrayList<Address>();for (int i = 1; i <=12; i++) {Address addr = new Address(); addr.setProvince("第"+i+"个省份");addr.setCity("第"+i+"个城市");lists.add(addr);}String json=gson.toJson(lists);//把数组对象转换成JsonType type = new TypeToken<List<Address>>(){}.getType();//通过反射List<Address> adds= gson.fromJson(json,type);for (Address a:adds) {System.out.println(a.getCity());}}/** * 通过Gson组装Json数据 */private  static void setDataByGson(){///////////////////组装json//////////////////// JsonObject jsonObject=new JsonObject(); Map<String, String> lists = new HashMap <String, String>();   lists.put("country", "中国"); lists.put("province", "广东省"); lists.put("city", "云浮市"); lists.put("district", "云城区闻莺路东升布艺"); lists.put("street", "闻莺路");         String json=gson.toJson(lists);//转换成json数据         System.out.println(json); //输出json                  ///////////////////获取json////////////////////         JsonParser parser = new JsonParser(); JsonElement jsonEl = parser.parse(json);         JsonObject jsonObjRoot = null;         jsonObjRoot = jsonEl.getAsJsonObject();         if(jsonObjRoot.isJsonObject()&&jsonObjRoot.get("district")!=null &&jsonObjRoot.get("street").getAsString()!=""){         String district=jsonObjRoot.get("district").getAsString();         System.out.println(district);         }} /** * 用gson去解析数据 * @param url网止连接 * @throws Exception */private static void getDataByGson(String flg) throws Exception {//PostMethod method = new PostMethod(url);String responseData="";if(flg.equals("URL")){//北京市的经纬度39.983424,116.322987String url=GlobalConstants.getBaiduMapUrl("你的key", "39.983424,116.322987", "json");responseData = HttpRequestUtils.HttpURLConnRequest(url, "GET");}else if(flg.equals("FILE")){String jsonData="ivyy/taobao/com/domain/gson/jsonmap.json";String path = JsonMap.class.getClassLoader().getResource(jsonData).getPath();responseData=IoUtils.reader(path);}//处理页面的json数据int start = responseData.indexOf("(") + 1;responseData = responseData.substring(start, responseData.lastIndexOf(")"));// 创建一个JsonParserJsonParser parser = new JsonParser();JsonElement jsonEl = parser.parse(responseData);// 把JsonElement对象转换成JsonObjectJsonObject jsonObjRoot = null;if (jsonEl.isJsonObject()) { jsonObjRoot = jsonEl.getAsJsonObject(); String status="",result="",lat="",lng="",formatted_address="",business="",city="",district="",province="",street="",street_number="",cityCode=""; //String status=gson.toJson(jsonObjRoot.get("status"));//方法一 status=jsonObjRoot.get("status").getAsString();//方法二 JsonElement resultEl=jsonObjRoot.get("result");//result节点  JsonElement locationEl=resultEl.getAsJsonObject().get("location");//location节点  lat=locationEl.getAsJsonObject().get("lat").getAsString(); lng=locationEl.getAsJsonObject().get("lng").getAsString();       formatted_address=resultEl.getAsJsonObject().get("formatted_address").getAsString();//formatted_address节点     business=resultEl.getAsJsonObject().get("business").getAsString();//business节点 cityCode=resultEl.getAsJsonObject().get("cityCode").getAsString();//cityCode节点 JsonElement compEl=resultEl.getAsJsonObject().get("addressComponent");//addressComponent节点  city=compEl.getAsJsonObject().get("city").getAsString(); district=compEl.getAsJsonObject().get("district").getAsString(); province=compEl.getAsJsonObject().get("province").getAsString(); street=compEl.getAsJsonObject().get("street").getAsString(); street_number=compEl.getAsJsonObject().get("street_number").getAsString();  JsonElement poisEl=resultEl.getAsJsonObject().get("pois");//pois节点 boolean flag=poisEl.isJsonArray();//是否为Json数组 if(flag){// System.out.println(poisEl.getAsJsonArray()); JsonArray jsonArray= poisEl.getAsJsonArray();//转为数组 String addr="",cp="",distance="",name="",poiType="",tel="",uid="",zip="",x="",y=""; //方法一 /*for(Iterator iter=jsonArray.iterator();iter.hasNext();){ JsonObject jop=(JsonObject) iter.next(); addr=jop.get("addr").getAsString(); x=jop.get("point").getAsJsonObject().get("x").getAsString();//x节点 System.out.println(jop.get("point").getAsJsonObject()); System.out.println("address"+addr+"\t\tx="+x); } */ //方法二 for (int i = 0; i < jsonArray.size(); i++) { JsonObject jop=(JsonObject)jsonArray.get(i); addr=jop.get("addr").getAsString(); cp=jop.get("cp").getAsString(); distance=jop.get("distance").getAsString(); name=jop.get("name").getAsString(); poiType=jop.get("poiType").getAsString(); tel=jop.get("tel").getAsString(); uid=jop.get("uid").getAsString(); zip=jop.get("zip").getAsString(); if(jop.get("point").getAsJsonObject().isJsonObject()) {// System.out.println(jop.get("point").getAsJsonObject()); x=jop.get("point").getAsJsonObject().get("x").getAsString();//x节点 y=jop.get("point").getAsJsonObject().get("y").getAsString();//y节点 System.out.println(x); } } }}}}

package ivyy.taobao.com.entity;import java.io.Serializable;import com.google.gson.annotations.Expose;/** * Gson gson=new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); * 创建Gson对象,没有@Expose注释的属性将不会被序列化 * serialize序列化 默认 true * deserialize反序列化 默认 true * @author liangjilong * @Email:jilongliang@sina.com */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;//街道号private String weibo;//微博public Address() {}public Address(String country, String province, int id, String cityCode,String streetNumber) {System.out.println(country+"\t"+province+"\t"+id+cityCode+"\t"+streetNumber);}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;}public String getWeibo() {return weibo;}public void setWeibo(String weibo) {this.weibo = weibo;}}

package ivyy.taobao.com.utils;import java.net.URL;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;/** *@Author:liangjilong *@Date:2015-1-4 *@Email:jilongliang@sina.com *@Version:1.0 *@Description */public class GlobalConstants {/*** * 获取url连接 * @param page第几页 * @param format格式(XML、JSON) * @return */public static String getSinaNewUrl(Integer page,String format){StringBuffer buffer=new StringBuffer("http://api.roll.news.sina.com.cn/zt_list?channel=news");String url="";buffer.append("&cat_1=shxw");//显示新闻buffer.append("&cat_2==zqsk||=qwys||=shwx||=fz-shyf");buffer.append("&level==1||=2");//级别buffer.append("&show_ext=1");buffer.append("&show_all=1");//显示所有buffer.append("&show_num=22");//显示多少条buffer.append("&tag=1");buffer.append("&format="+format);buffer.append("&page="+page);buffer.append("&callback=newsloader");url=buffer.toString();return url;}/*** * 获取百度地图的url * @param ak秘钥即你在百度申请的key调用访问地图的key * @param location地方的经纬度 * @param format格式(json或者xml) * @return */public static String getBaiduMapUrl(String ak,String location,String format){StringBuffer buffer=new StringBuffer("http://api.map.baidu.com/geocoder/v2/?");String url="";buffer.append("ak="+ak);buffer.append("&callback=renderReverse");buffer.append("&location="+location);buffer.append("&output="+format);buffer.append("&pois=1");url=buffer.toString();return url;}/*** * 获取文章的内容 * 从新浪的网页分析,通过文章body的id就可以拿到相应的文章内容.. * @param url * @return */public static String getNewsContent(String url) throws Exception{Document doc=Jsoup.parse(new URL(url), 3000);if(doc!=null){String artibody=doc.getElementById("artibody").html();//通过网页的html的id去拿到新闻内容artibodyreturn artibody;}else{return "网络异常";}}}

package ivyy.taobao.com.utils;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.HttpURLConnection;import java.net.URL;/** *@Author:liangjilong *@Date:2015-1-4 *@Email:jilongliang@sina.com *@Version:1.0 *@Description */public class HttpRequestUtils {/** * 发送http请求 * POST和GET请求都可以 * @param requestUrl 请求地址 * @param method传入的执行的方式 是GET还是POST方式 * @return String */public static String HttpURLConnRequest(String requestUrl,String method) {StringBuffer buffer = new StringBuffer();try {URL url = new URL(requestUrl);HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();httpUrlConn.setDoInput(true);httpUrlConn.setRequestMethod(method);httpUrlConn.setUseCaches(false);  httpUrlConn.setInstanceFollowRedirects(true); //重定向httpUrlConn.connect();// 将返回的输入流转换成字符串InputStream inputStream = httpUrlConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}bufferedReader.close();inputStreamReader.close();// 释放资源inputStream.close();inputStream = null;httpUrlConn.disconnect();} catch (Exception e) {e.printStackTrace();}return buffer.toString();}}
package ivyy.taobao.com.utils;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileOutputStream;import java.io.FileReader;import java.io.OutputStreamWriter;import java.io.Writer;/** *@Author:liangjilong *@Date:2015-1-5 *@Version:1.0 *@Description: */public class IoUtils {/** * 读文件流 *  * @param filePath从哪里读取的文件路径 * @return */public static String reader(String filePath) {String content="";FileReader read = null;BufferedReader reader = null;try {read = new FileReader(new File(filePath));reader = new BufferedReader(read);StringBuffer buffer = new StringBuffer("");content = reader.readLine();while (content != null) {buffer.append(content).append("\n");content = reader.readLine();}return content = buffer.toString();// 返回} catch (Exception e) {e.printStackTrace();} finally {try {if (reader != null)reader.close();if (read != null)read.close();} catch (Exception e) {e.printStackTrace();}}return "";// 没值就返回空}/** * 处理文件写 * @param content * @param htmlPath * @return */public static boolean write(String content, String htmlPath) {          boolean flag = true;          try {              Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(htmlPath), "utf-8"));              out.write("\n" + content);              out.close();          } catch (Exception ex) {              ex.printStackTrace();              return false;          }          return flag;      } }
renderReverse&&renderReverse({    "status": 0,    "result": {        "location": {            "lng": 116.32298703399,            "lat": 39.983424051248        },        "formatted_address": "北京市海淀区中关村大街27号1101-08室",        "business": "中关村,人民大学,苏州街",        "addressComponent": {            "city": "北京市",            "direction": "附近",            "distance": "7",            "district": "海淀区",            "province": "北京市",            "street": "中关村大街",            "street_number": "27号1101-08室"        },        "pois": [            {                "addr": "北京市海淀区海淀路35号",                "cp": "NavInfo",                "direction": "附近",                "distance": "25",                "name": "中关村大厦",                "poiType": "商务大厦",                "point": {                    "x": 116.32285606105,                    "y": 39.983568897877                },                "tel": "",                "uid": "3c08da2d19c0964d9b005001",                "zip": ""            },            {                "addr": "北京市海淀区中关村大街27号1101-08室",                "cp": "NavInfo",                "direction": "附近",                "distance": "1",                "name": "眉州东坡酒楼中关村店",                "poiType": "餐饮",                "point": {                    "x": 116.32298182382,                    "y": 39.983416864194                },                "tel": "",                "uid": "95540906d327cb7527d2bb0a",                "zip": ""            },            {                "addr": "北京市海淀区中关村大街27号1101-08室",                "cp": "NavInfo",                "direction": "附近",                "distance": "1",                "name": "中国人民财产保险中关村营业部",                "poiType": "金融",                "point": {                    "x": 116.32298182382,                    "y": 39.983416864194                },                "tel": "",                "uid": "04b48c6cd2a493b92a06ce64",                "zip": ""            },            {                "addr": "北京市海淀区海淀路35号",                "cp": "NavInfo",                "direction": "附近",                "distance": "41",                "name": "中国建设银行中关村支行",                "poiType": "金融",                "point": {                    "x": 116.32291894244,                    "y": 39.98370711002                },                "tel": "",                "uid": "4eabebb07d31784b4d6d461f",                "zip": ""            },            {                "addr": "北京市海淀区知春路113号1706号",                "cp": "NavInfo",                "direction": "西",                "distance": "498",                "name": "银网中心",                "poiType": "商务大厦",                "point": {                    "x": 116.32720385972,                    "y": 39.982269689954                },                "tel": "",                "uid": "fd8f491140a0a7beadee7a37",                "zip": ""            },            {                "addr": "北京市海淀区中关村大街27号",                "cp": "NavInfo",                "direction": "附近",                "distance": "28",                "name": "中国建设银行ATM",                "poiType": "金融",                "point": {                    "x": 116.3229458916,                    "y": 39.983617272159                },                "tel": "",                "uid": "2c7d2dbe35f607d3cafa5fbe",                "zip": ""            },            {                "addr": "北京市海淀区中关村大街25号",                "cp": "NavInfo",                "direction": "附近",                "distance": "43",                "name": "中关村大厦停车场",                "poiType": "交通设施",                "point": {                    "x": 116.32334114602,                    "y": 39.983292472745                },                "tel": "",                "uid": "d74b272e19c0964d9b0050ff",                "zip": ""            },            {                "addr": "北京市海淀区中关村大街23号",                "cp": "NavInfo",                "direction": "西",                "distance": "115",                "name": "中国科学院黄庄小区",                "poiType": "地产小区",                "point": {                    "x": 116.32396995988,                    "y": 39.983672557011                },                "tel": "",                "uid": "3594ec2c0c19ca50a3d23036",                "zip": ""            },            {                "addr": "北京市海淀区丹棱街甲1",                "cp": "NavInfo",                "direction": "东南",                "distance": "296",                "name": "欧美汇购物中心",                "poiType": "购物",                "point": {                    "x": 116.32159843334,                    "y": 39.985172141413                },                "tel": "",                "uid": "7cbcc1af640ac86e744ff1b7",                "zip": ""            },            {                "addr": "北京市海淀区中关村大街19号-3层-l310号",                "cp": "NavInfo",                "direction": "东南",                "distance": "185",                "name": "新中关大厦",                "poiType": "商务大厦",                "point": {                    "x": 116.32194877248,                    "y": 39.984425808622                },                "tel": "",                "uid": "001cbcab42491f56d92f281e",                "zip": ""            }        ],        "poiRegions": [],        "cityCode": 131    }})



0 0
原创粉丝点击