一種快速簡潔解析JSON數據接口的方法

    Jackson提供了兩種不一樣的JSON解析器:
        (1)ObjectMapper:把JSON解析到自定義的Java類中,或者解析到一個Jackson指定的樹形結構中;
        (2)Jackson JsonParser:一種「拉式」解析器,每次解析一組JSON數據。java

    本文介紹第一種方法:使用 ObjectMapper。git

 

一.使用前準備

    Jackson包含一個core jar,和兩個依賴core jar的jar,如圖:數據庫

                               

    其中:Jackson Annotations依賴Jackson Core,Jackson Databind依賴Jackson Annotations。json

把上面三個jar包添加到項目中。數組

 

二.使用示例

    調用阿里雲一個查詢城市經緯度信息的接口爲例。首先要知道解析接口返回JSON數據的格式:app

{"lon":121.4737,"level":1,"address":"","cityName":"上海市","alevel":4,"lat":31.23041}

    (1)根據JSON格式,準備對應的實體類,存儲解析後的JSON數據:CityGeoEntity.javaide

    使用@JsonProperty("xxx")註解表示,實體類中某個成員變量對應Json串中某個字段,成員變量名能夠不與Json串中屬性同名,但必定要保證 @JsonProperty("xxx") 中的名稱與Json串可以一一對應測試

import com.fasterxml.jackson.annotation.JsonProperty;
public class CityGeoEntity {

	private String longitude;
	private String latitude;
	private String level;
	private String alevel;
	private String address;
	private String cityName;
	
	@JsonProperty("level")
	public String getLevel() {
		return level;
	}
	@JsonProperty("level")
	public void setLevel(String level) {
		this.level = level;
	}
	@JsonProperty("lon")
	public String getLongitude() {
		return longitude;
	}
	@JsonProperty("lon")
	public void setLongitude(String longitude) {
		this.longitude = longitude;
	}
	@JsonProperty("lat")
	public String getLatitude() {
		return latitude;
	}
	@JsonProperty("lat")
	public void setLatitude(String latitude) {
		this.latitude = latitude;
	}
	@JsonProperty("alevel")
	public String getAlevel() {
		return alevel;
	}
	@JsonProperty("alevel")
	public void setAlevel(String alevel) {
		this.alevel = alevel;
	}
	@JsonProperty("address")
	public String getAddress() {
		return address;
	}
	@JsonProperty("address")
	public void setAddress(String address) {
		this.address = address;
	}
	@JsonProperty("cityName")
	public String getCityName() {
		return cityName;
	}
	@JsonProperty("cityName")
	public void setCityName(String cityName) {
		this.cityName = cityName;
	}
	@Override
	public String toString() {
		return "CityGeoEntity [longitude=" + longitude + ", latitude=" + latitude + "]";
	}
}

    (2)使用ObjectMapper解析Json數據,保存至實體類中,後續能夠本身持久化到數據庫中。this

String surl="http://gc.ditu.aliyun.com/geocoding?a=上海市";
URL url=new URL(surl);
HttpURLConnection http=(HttpURLConnection)url.openConnection();
http.connect();
int rc=http.getResponseCode();
if(rc!=HttpURLConnection.HTTP_OK) 
	throw new IOException("Http error: "+rc);
InputStream is=http.getInputStream();

CityGeoEntity cityEntity = new ObjectMapper().readValue(is,CityGeoEntity.class);
System.out.println(cityName+" : " + cityEntity);

    測試結果:阿里雲

上海市 : CityGeoEntity [longitude=121.4737, latitude=31.23041]

 

三.總結

    Jackson是一種JSON API,也是最流行,速度最快的JSON API。使用ObjectMapper解析JSON接口數據,可以快速簡潔完成接口任務,JSON對象操做都在Jackson內部完成。

    上面是簡單的封裝調用,ObjectMapper也支持複雜結構的Json字符串(數組),使用分治的思想,找到每一個基本的JSON結構,封裝爲Entity對象,內部結構做爲外部結構的成員變量,直至解析到最外層。

    使用的這種方法解析接口在生產環境驗證過。

相關文章
相關標籤/搜索