package com.app.json;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
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;
import com.google.gson.reflect.TypeToken;
@SuppressWarnings("all")
/**
* @author liangjilong
* @date:2013-07-18
*/
public class JsonMap {
private static Gson gson=new Gson();
private static final HttpClient client = new HttpClient();
private static final String url = "http://api.map.baidu.com/geocoder/v2/?ak=E4805d16520de693a3fe707cdc962045&callback=renderReverse&location=39.983424,116.322987&output=json&pois=1";
public static void main(String[] args) throws Exception {
///
//setDataByJsonLib();
//setDataByGson();
///
//getDataByJsonLib(url);
//getDataByGson(url);
///
//getStrToJsonByJsonLib();
//getObjectToJsonByJsonLib();
//getArrayToJsonByJsonLib();
getArrayToJsonByJSONLib();
//getStrToJsonByGson();
//getObjectToJsonByGson();
//getArrayToJsonByGson();
///
}
/**
* ByJsonLib把字符串转换成Json数据
* @throws Exception
*/
private static void getStrToJsonByJsonLib()throws Exception
{
String jsonStr="{\"city\":\"广州市\",\"province\":\"广东省\"}"; //这本身是json数据,也是字符串!
//String jsonStr="{city:广州市,province:广东省}"; //JsonLib不支持这个格式
JSONObject jsonObject=new JSONObject();
jsonObject=jsonObject.fromObject(jsonStr);
if(!jsonObject.isEmpty()){
System.out.println(jsonObject.get("province")+"\t"+jsonObject.get("city"));
}
}
/**
* 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());
}
/**
* ByJsonLib,把对象转换成Json数据
* @throws Exception
*/
private static void getObjectToJsonByJsonLib()throws Exception
{
Address addr = new Address();
addr.setProvince("广东省");
addr.setCity("广州市");
JSONObject jsonObject=new JSONObject();
jsonObject=jsonObject.fromObject(addr);
Address addrs= (Address) JSONObject.toBean(jsonObject, Address.class);
System.out.println(addrs.getProvince()+"\t"+addrs.getCity());
}
/**
* 通过ByJSONLib把数组转换成Json数据
* @param url
* @throws Exception
*/
private static void getArrayToJsonByJsonLib()throws Exception
{
Address address=new Address();
address.setDistrict("天河区");
address.setCity("广州");
address.setProvince("广东省");
JSONArray jsonArr = JSONArray.fromObject(address); //把对象转换成Json对象
//注释掉的也可以执行
//Map<String, Class<Address>> map=new HashMap<String,Class<Address>>();
//map.put("address", Address.class);
//List<Address> lists = JSONArray.toList(jsonArr, Address.class, map); //把对象Json数组转换成Json数组
List<Address> lists = JSONArray.toList(jsonArr, Address.class); //把对象Json数组转换成Json数组
for (Address obj : lists) {
System.out.println(obj.getProvince());
System.out.println(obj.getCity());
System.out.println(obj.getDistrict());
}
}
/**
* 通过ByJSONLib把数组转换成Json数据
* @param url
* @throws Exception
*/
private static void getArrayToJsonByJSONLib()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+"个城市");
addr.setCityCode("130"+i);
addr.setStreet("街道"+i);
addr.setStreetNumber("街道号码"+i);
lists.add(addr);
}
JSONArray jsonArr = JSONArray.fromObject(lists); //把对象转换成Json对象
System.out.println(jsonArr);
Map<String, Class<Address>> map=new HashMap<String,Class<Address>>();
//拼接成address[{"city":"第1个城市","cityCode":"1301","district":"","province":"第1个省份","street":"街道1","streetNumber":"街道号码1"},{"city":"第2个城市","cityCode":"1302","district":"","province":"第2个省份","street":"街道2","streetNumber":"街道号码2"},{"city":"第3个城市","cityCode":"1303","district":"","province":"第3个省份","street":"街道3","streetNumber":"街道号码3"},{"city":"第4个城市","cityCode":"1304","district":"","province":"第4个省份","street":"街道4","streetNumber":"街道号码4"},{"city":"第5个城市","cityCode":"1305","district":"","province":"第5个省份","street":"街道5","streetNumber":"街道号码5"},{"city":"第6个城市","cityCode":"1306","district":"","province":"第6个省份","street":"街道6","streetNumber":"街道号码6"},{"city":"第7个城市","cityCode":"1307","district":"","province":"第7个省份","street":"街道7","streetNumber":"街道号码7"},{"city":"第8个城市","cityCode":"1308","district":"","province":"第8个省份","street":"街道8","streetNumber":"街道号码8"},{"city":"第9个城市","cityCode":"1309","district":"","province":"第9个省份","street":"街道9","streetNumber":"街道号码9"},{"city":"第10个城市","cityCode":"13010","district":"","province":"第10个省份","street":"街道10","streetNumber":"街道号码10"},{"city":"第11个城市","cityCode":"13011","district":"","province":"第11个省份","street":"街道11","streetNumber":"街道号码11"},{"city":"第12个城市","cityCode":"13012","district":"","province":"第12个省份","street":"街道12","streetNumber":"街道号码12"}]数组形势
map.put("address", Address.class);//
List<Address> listAdds = JSONArray.toList(jsonArr, Address.class, map); //把对象Json数组转换成Json数组
for(Iterator iter=listAdds.iterator();iter.hasNext();)
{
Address add=(Address)iter.next();
System.out.println(add.getProvince()+"\t"+add.getCity()+"\t"+add.getStreet()+"\t"+add.getCityCode());
}
}
/**
* 通过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
Gson gson=new Gson();
JsonObject jsonObject=new JsonObject();
Map<String, String> lists = new HashMap <String, String>();
lists.put("广东省", "广州市");
lists.put("广州市", "天河区");
lists.put("天河区", "棠东");
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("天河区")!=null &&jsonObjRoot.get("天河区").getAsString()!=""){
String district=jsonObjRoot.get("天河区").getAsString();
System.out.println(district);
}
}
/**
* 用gson去解析数据
* @param url网止连接
* @throws Exception
*/
private static void getDataByGson(String url) throws Exception {
PostMethod method = new PostMethod(url);
int statusCode = client.executeMethod(method);
if (statusCode == HttpStatus.SC_OK) {
String responseData = method.getResponseBodyAsString();
//处理页面的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);
}
}
}
}
}
method.releaseConnection();//释放
}
/**
* 使用Json-lib组装数据
* @throws Exception
*/
private static void setDataByJsonLib()throws Exception{
JSONObject jsonObject=new JSONObject();
Map<String, String> lists=new HashMap<String, String>();
lists.put("广东省", "广州市");
lists.put("广州市", "天河区");
lists.put("天河区", "棠东");
jsonObject=jsonObject.fromObject(lists);//转换为json数据
System.out.println(jsonObject);//打印json数据
System.out.println(jsonObject.get("天河区"));//取出json数据
}
/**
* 使用Json-lib获取json数据
* @throws Exception
*/
private static void getDataByJsonLib(String url)throws Exception{
PostMethod method = new PostMethod(url);
int statusCode = client.executeMethod(method);
if (statusCode == HttpStatus.SC_OK) {
String responseData = method.getResponseBodyAsString();
//处理页面的json数据
int start = responseData.indexOf("(") + 1;
responseData = responseData.substring(start, responseData.lastIndexOf(")"));
JSONObject jsonObject= JSONObject.fromObject(responseData);
//变量
String status="",result="",lat="",lng="",formatted_address="",business="",city="",district="",province="",street="",street_number="";
if(jsonObject.has("status")&&jsonObject.get("status")!=null&&jsonObject.get("status")!=""){
status=jsonObject.get("status").toString();//status
}
result=jsonObject.get("result").toString();//result
JSONObject location= JSONObject.fromObject(JSONObject.fromObject(result).get("location").toString());
lat=location.get("lat").toString();//lat
lng=location.get("lng").toString();//lng
JSONObject formatAddr= JSONObject.fromObject(result);
formatted_address=formatAddr.get("formatted_address").toString();//formatted_address
business=formatAddr.get("business").toString();//business
//变量
JSONObject compObj = JSONObject.fromObject(JSONObject.fromObject(result).get("addressComponent").toString());//addressComponent
city=compObj.get("city").toString();
district=compObj.get("district").toString();
province=compObj.get("province").toString();
street=compObj.get("street").toString();
street_number=compObj.get("street_number").toString();
JSONArray poisArr = JSONObject.fromObject(result).getJSONArray("pois");
if(poisArr !=null && poisArr.size()>0){
for(int i = 0; i < poisArr.size(); i++) {
//变量
String addr="",cp="",distance="",name="",poiType="",tel="",uid="",zip="";
JSONObject tempJson = JSONObject.fromObject(poisArr.get(i));
addr = tempJson.get("addr").toString();
cp = tempJson.get("cp").toString();
distance = tempJson.get("distance").toString();
name = tempJson.get("name").toString();
poiType = tempJson.get("poiType").toString();
tel = tempJson.get("tel").toString();
uid = tempJson.get("uid").toString();
zip = tempJson.get("zip").toString();
JSONArray pointArr=poisArr.fromObject(tempJson.get("point"));//获取ponit
//变量
String x="",y="";
for (int j = 0; j < pointArr.size(); j++) {
JSONObject obj = JSONObject.fromObject(pointArr.get(j));
x=obj.get("x").toString();
y=obj.get("x").toString();
}
}
}
}
}
}
实体类:
package com.app.entity.duapp;
import java.io.Serializable;
public class Address implements Serializable{
private String streetNumber;
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;
}
}
防止百度的URL失效:提供一个模板
renderReverse&&renderReverse( { status: 0, result: { location: { lng: 116.322987, lat: 39.983424071404 }, formatted_address: "北京市海淀区中关村大街27号1101-08室", business: "人民大学,中关村,苏州街", addressComponent: { city: "北京市", district: "海淀区", province: "北京市", street: "中关村大街", street_number: "27号1101-08室" }, pois: [ { addr: "中关村西区南侧(中关村科技园区内)", cp: "mix", distance: "0.050000", name: "中关村大厦", poiType: "办公大厦,商务大厦", point: { x: 116.32298658484, y: 39.983423843929 }, tel: "(010)82856666", uid: "bd045712cc428d06b6265537", zip: "100000" }, { addr: "中关村大街27号", cp: "NavInfo", distance: "0.050000", name: "眉州东坡酒楼中关村店", poiType: "中餐馆,餐饮", point: { x: 116.32298658484, y: 39.983423843929 }, tel: "(010)82856948", uid: "95540906d327cb7527d2bb0a", zip: "" }, { addr: "中关村大街27号", cp: "NavInfo", distance: "0.050000", name: "中国人民财产保险中关村营业部", poiType: "中国人民财产保险,保险公司,金融", point: { x: 116.32298658484, y: 39.983423843929 }, tel: "(010)82856779", uid: "04b48c6cd2a493b92a06ce64", zip: "100000" }, { addr: "北京市海淀区", cp: "NavInfo", distance: "94.432081", name: "光合作用书房", poiType: "图书音像,购物", point: { x: 116.32239334388, y: 39.983890240676 }, tel: "", uid: "f4e732a1ad2e8a57f31937fb", zip: "" }, { addr: "中关村大街27号", cp: "NavInfo", distance: "42.195731", name: "建行中关村支行", poiType: "中国建设银行,银行,金融", point: { x: 116.32292037972, y: 39.983711118168 }, tel: "", uid: "4eabebb07d31784b4d6d461f", zip: "100000" }, { addr: "北京市海淀区", cp: "NavInfo", distance: "62.342644", name: "海淀医院-激光整形美容部", poiType: "美容美发,生活服务", point: { x: 116.32317954086, y: 39.98301950182 }, tel: "", uid: "a676b6567d51c145374aae32", zip: "" }, { addr: "中关村大街19号新中关购物中心1楼", cp: "NavInfo", distance: "112.983688", name: "星巴克新中关店", poiType: "星巴克,咖啡厅,休闲餐饮,餐饮", point: { x: 116.32218215226, y: 39.983899777278 }, tel: "(010)82486056", uid: "93749e45ae0a139ece06a409", zip: "" } ], cityCode: 131 } } )
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 JSON Vs XML 1.JSON和XML的数据可读性基本相同 2.JSON和XML同样拥有丰富的解析手段 3.JSON相对于XML来讲,数据的体积小 4.JSON与JavaScript的交互更加方便 5.JSON对数据的描述性比XML较差 6.JSON的速度要远远快于XML
使用json时出现找不到class文件异常: org/apache/commons/collections/map/ListOrderedMap <int>()方法不存在
可能是json版本不一致造成的,
commons-logging-1.0.4.jar
commons-lang-2.0.jar
commons-collections-3.2.jar
commons-beanutils-1.7.0.jar
json-lib-2.4-jdk15.jar
ezmorph-1.0.6.jar
Json技术: json-lib-2.4-jdk15.jarhttp://json-lib.sourceforge.net/ http://sourceforge.net/projects/json-lib/ gsonhttp://code.google.com/p/google-gson/downloads/list Jackson:http://wiki.fasterxml.com/JacksonInFiveMinutes#Full_Data_Binding_.28POJO.29_Example jQuery-Json http://code.google.com/p/jquery-json/downloads/list 。。。。。。。 。。。。。。。 。。。。。。