加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

【第13篇】通过GSON的JsonParser去读取数据处理json数据

发布时间:2020-12-14 02:49:49 所属栏目:大数据 来源:网络整理
导读:package ivyy.taobao.com.domain.gson; import ivyy.taobao.com.entity.Address;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import net.sf.json.JSONArray;import com.google.gson.Gson;import com.google.gson.JsonArray
package ivyy.taobao.com.domain.gson;  
 
import ivyy.taobao.com.entity.Address;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import net.sf.json.JSONArray;

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形势取值
				System.out.println(obj);
				Address add=gson.fromJson(obj,Address.class);//方法二:灵活使用Gson取数据
				System.out.println(add.getProvince()+"t"+add.getCity());
			 }
		}
	}
	 
 } 

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;
	}
	
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读