【第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
- 【第21篇】通过Gson去把字符串转成json,对象转成Json,数组转换成Json处理Json数据
- js把json字符串转成json对象
- 使用Gson把json字符串转成Map
- Gson把对象转成json格式的字符串
- json字符串转成json对象
- json字符串转成json对象
- gson将JSON字符串转成Java对象
- 【第15篇】通过FastJson把字符串转换成JSON和Map和List对象处理json数据
- 【第4篇】通过Json-lib把Json转成Map数据
- 通过FastJson把字符串转换成JSON和Map和List对象处理json数据
- 通过google的gson把xml转成json
- js中 json字符串转成json对象
- 将字符串转成json对象
- Json字符串转成List对象
- 【第3篇】通过JSON-Lib把数组转换成Json数据
- gson 泛型数组json 转成 泛型对象
- json数组转成ArrayList
- python 数组转成json
- window和linux下遍历目录的比较
- uninx分类常用命令 ---- 【资源备份】
- C++/CX支持C#传递可空类型参数
- hdoj 1466 计算直线的交点数 【经典DP】
- Bootstrap---Fluid layout 流布局
- 【第21篇】通过Gson去把字符串转成json,对象转成Json,数组转换成Json处理Json数据
- EA教程(转)
- Swift-内存管理
- 转:融合通信来了!微信该何去何从?
- IM即时通讯实现原理
- OSG中文字的使用,osgText
- 《统计学习方法,李航》:5、决策树
- 对C++中指向数组类型的指针的理解
- JAVA笔记:深入研究Java中的反射机制