【第21篇】通过Gson去把字符串转成json,对象转成Json,数组转换成Json处理Json数据
2015-01-19 22:56
981 查看
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);//把数组对象转换成Json Type 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.322987 String 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(")")); // 创建一个JsonParser JsonParser parser = new JsonParser(); JsonElement jsonEl = parser.parse(responseData); // 把JsonElement对象转换成JsonObject JsonObject 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去拿到新闻内容artibody return 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 } } )
相关文章推荐
- 通过FastJson把字符串转换成JSON和Map和List对象处理json数据
- 【第15篇】通过FastJson把字符串转换成JSON和Map和List对象处理json数据
- Gson解析或者转换对象成json字符串时,String为NULL转空字符串处理方案
- 使用eval将json字符串转换为json对象并且处理json数据
- JSON.stringify()将JSON对象转换为字符串通过Ajax传入到后台处理
- json的作用:按规定格式保存js语言中的一组数据并转换为字符串(json是种特殊的容器,一般保存对象和数组数据(可以嵌套),并把它们装换为字符串在网络中传输?))
- 通过Ajax技术,将数组类型数据转换为JSON格式的对象
- JSON.stringify()将JSON对象转换为字符串通过Ajax传入到后台处理
- Gson解析json字符串、json数组转换成对象
- JSON数据解析(JSON对象与json字符串json数组之间转换)
- 后台将对象转换为json格式,前台js解析json数据,将字符串转化为数组
- JSON.stringify()将JSON对象转换为字符串通过Ajax传入到后台处理
- json学习(一)--将一个对象或集合转换成符合json数据格式的字符串
- Android利用Gson实现对象和Json数据的相互转换
- Android利用Gson实现对象和Json数据的相互转换
- 关于PHP在数组对象与JSON数据之间的转换问题(编码问题)
- gson(JSON字符串转换成一个相等的Java对象)
- JSON对象(数组)转换为JSON字符串
- Gson对Java嵌套对象和JSON字符串之间的转换
- android/java中把对象、对象bean、Collection以及字符串转换成Json格式数据