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.