Jsonのデータを柔軟に組み立てるGsonのJsonParserとJsonReaderを用いてJsonの詳細な例を解析する
10276 ワード
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":"[email protected]","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.put("age", "25");
users.put("tel", "12396878");
users.put("email", "[email protected]");
Map<Object, Object> listsObj = new HashMap <Object, Object>();
listsObj.put("address",address);//address
listsObj.put("users",users);//users
Object obj=listsObj;//
Map<Object, Object> info = new HashMap <Object, Object>();
info.put("info", obj);//json
String json=gson.toJson(info);// json
System.out.println(json);// json
readJsonData(null,json);
}
/**
* json
* @param in
* @throws Exception
*/
public static void readJsonData(InputStream in,String json) throws Exception {
//JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));
JsonReader reader = new JsonReader(new StringReader(json));
try {
reader.beginObject();
String tagName = reader.nextName();
if (tagName.equals("info")) {
readInfo(reader);
}
reader.endObject();
} finally {
reader.close();
}
}
/**
* json ( , )
* @param reader
* @throws Exception
*/
public static void readInfo(JsonReader reader) throws Exception {
reader.beginObject();
while (reader.hasNext()) {
String tagName = reader.nextName();
if (tagName.equals("address")) {
readAddress(reader);
} else if (tagName.equals("users")) {
readUsers(reader);
}
}
reader.endObject();
}
/**
*
* @param reader
* @throws IOException
*/
public static void readUsers(JsonReader reader) throws IOException {
reader.beginObject();
while (reader.hasNext()) {
String tag = reader.nextName();
if (tag.equals("username")) {
String username = reader.nextString();
System.out.println(" :" + username);
} else if (tag.equals("email")) {
String email = reader.nextString();
System.out.println("Email:" + email);
} else if (tag.equals("tel")) {
String tel = reader.nextString();
System.out.println(" :" + tel);
}else if (tag.equals("age")) {
String age = reader.nextString();
System.out.println(" :" + age);
} else {
reader.skipValue();// / break
}
}
reader.endObject();
}
/**
*
* @param reader
* @throws IOException
*/
public static void readAddress(JsonReader reader) throws IOException {
reader.beginObject();
while (reader.hasNext()) {
String tag = reader.nextName();
if (tag.equals("province")) {
String province = reader.nextString();
System.out.println(" :" + province);
} else if (tag.equals("city")) {
String city = reader.nextString();
System.out.println(" :" + city);
} else if (tag.equals("street")) {
String street = reader.nextString();
System.out.println(" :" + street);
}else if (tag.equals("district")) {
String district = reader.nextString();
System.out.println(" :" + district);
} else {
reader.skipValue();// / break
}
}
reader.endObject();
}
}
エンティティークラス:
package com.app.entity.duapp;
import java.io.Serializable;
import com.google.gson.annotations.Expose;
/**
* new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
* Gson , @Expose
* serialize true
* deserialize true
*
*/
public class Address implements Serializable{
@Expose(serialize=false)// /
private String streetNumber;
@Expose(deserialize=false)//
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;
}
}