您的位置:首页 > Web前端 > JavaScript

【第12篇】通过GSON的WriterReader与JsonReader去处理json数据

2015-01-18 21:16 162 查看
package ivyy.taobao.com.domain.gson;

import ivyy.taobao.com.entity.Address;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
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.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
/**
 *@Date:2015-1-5
 *@Author:liangjilong
 *@Email:jilongliang@sina.com
 *@Version:1.0
 *@Description:
 */
@SuppressWarnings("all")
public class GsonWriterReader {
	private static Gson gson = new Gson();
	public static void main(String[] args) throws Exception {
		List<Map<String, String>> list = new ArrayList<Map<String, String>>();
		Map map1 = new HashMap();
		map1.put("country", "中国");
		map1.put("province", "广东省");
		map1.put("city", "云浮市");
		map1.put("district", "云城区闻莺路东升布艺");
		map1.put("street", "闻莺路");
		
		Map map2 = new HashMap();
		map2.put("country", "中国");
		map2.put("province", "广东省");
		map2.put("city", "广州市");
		map2.put("district", "越秀区");
		map2.put("street", "五羊新邨");
		
		list.add(map1);
		list.add(map2);
		
		String[] str = new String[2];
		str[0]="中国";
		str[1]="美国";
		 
		Address add = new Address(1, "中国");
		
		List<Map> mapList = printlnJsonInfo(list, map1, str, add);
		
		/**写*/
		File file = writerJsonToFile(gson, mapList);
		/***读*/
		readJsonFromFile(gson, file);
	}

	/**
	 * 打印Json信息
	 * @param list
	 * @param map1
	 * @param str
	 * @param add
	 * @return
	 */
	private static List<Map> printlnJsonInfo(List<Map<String, String>> list, Map map1,String[] str, Address add) {
		String listsJson = gson.toJson(list);// 集合转json
		String mapJson = gson.toJson(map1);// map转json
		String arrayJson = gson.toJson(str);// 数组转json
		String ObjJson = gson.toJson(add);// 对象转json

		System.out.println("->********************Object to JSON********************->");
		System.out.println("list -> 转Json: " + listsJson);
		System.out.println("Map对象 -> 转Json: " + mapJson);
		System.out.println("String数组 -> 转Json: " + arrayJson);
		System.out.println("Object -> 转Json: " + ObjJson);
		System.out.println("->********************JSON to Object  ********************->");
		
		List<Address> listUser = new ArrayList<Address>();
		//从str遍历添加了多个对象
		for (int i = 0; i<str.length; i++) {
			listUser.add(new Address(i,str[i]));
		}
		String listJson = gson.toJson(listUser);
		System.out.println("Json-> 转泛型集合: " + listJson);
		List<Address> listAdd = gson.fromJson(listJson,new TypeToken<List<Address>>() {}.getType());
				
		for (Address addr : listAdd) {
			System.out.println("国家:" + addr.getCountry());
		}
		System.out.println("Json -> 转泛型集合List<Map<String,String>>: " + listsJson);
		List<Map> mapList = gson.fromJson(listsJson,new TypeToken<List<Map<String, String>>>() {}.getType());
				
		for (Map map : mapList) {
			System.out.println("地区:" + map.get("street"));
		}
		System.out.println("Json -> 转Oject: " + listsJson);
		Address ad = gson.fromJson(ObjJson, Address.class);
		System.out.println("国家:"+ad.getCountry());
		return mapList;
	}

	/**
	 * JsonWriter
	 * 把Json数据写入文件里面
	 * @param gson
	 * @param mapList
	 * @return
	 * @throws Exception
	 */
	private static File writerJsonToFile(Gson gson, List<Map> mapList)throws Exception {
		File file = new File("gson");// 把json保存项目根目录下无后缀格式的文本
		OutputStream out = new FileOutputStream(file);
		JsonWriter writer = new JsonWriter(new OutputStreamWriter(out, "UTF-8"));//设置编码
		gson.toJson(mapList, new TypeToken<List<Map<String, String>>>() {}.getType(), writer);//把值写进去
		writer.flush();
		writer.close();
		return file;
	}

	/**
	 * JsonReader
	 * 读取从本地文件的Json数据
	 * @param gson
	 * @param file
	 * @throws Exception
	 */
	private static void readJsonFromFile(Gson gson, File file)throws Exception {
		InputStream input = new FileInputStream(file);
		JsonReader reader = new JsonReader(new InputStreamReader(input));
		List<Map> content = gson.fromJson(reader,new TypeToken<List<Map<String, String>>>() {}.getType());
		//List<Map> content = gson.fromJson(new InputStreamReader(input),new TypeToken<List<Map<String, String>>>() {}.getType());
		for (Map map : content) {
			System.out.println("地区:" + map.get("street"));
		}
		reader.close();
	}

}
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(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;
	}
	
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: