一种快速简洁解析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对象,内部结构做为外部结构的成员变量,直至解析到最外层。

    使用的这种方法解析接口在生产环境验证过。

相关文章
相关标签/搜索