Jackson实现Json Java 数据绑定

Jackson实现Json Java 数据绑定

Json Java Data Binding

Java 开发人员最喜欢处理…Java POJO。你会喜欢这样一个黑盒子的:你可以从一端放入JSON字符串,从另一端得到POJO。这就是Jackson的JSON Java 数据绑定的功能。举个栗子是最好的解释方法。我们使用来自免费音乐存档的json(译者注:实际上,现在无法访问url对应的资源)。我们可以将一个JSON字符串读入Album 对象。Albums对象包含一个Dataset数组;

这是JSON Java数据绑定工作的方式:

  1. 首先创建一个Java类来承接JSON数据。我们创建一个Albums来对应整个JSON。JSON包含一个dataset数组元素。我们创建一个DataSet类型的Java对象并且在Albums对象内部,我们创建一个datset属性,它是DataSet对象的数组;
  2. 创建一个ObjectMapper类对象mapper,这是实现JSON到Java对象映射的类。
  3. 我们使用mapper对象的readValue方法来读取数据。这个方法有很多重载形式,我们使用的是接收一个URL作为参数的版本(译者注:实际上,这个URL已经不能访问了),然而,这个方法也可以从file、inputStream、string或者byte数组读取数据;
  4. ObjectMapper将缓存序列化器或反序列化器。所以对多次转换来说,使用同一个ObjectMapper对象是一个好主意;
  5. 如果你能获取一个InputStream,就把它传递给Jackson并且为了提高性能,不要将它包裹在InputStreamReader里;

JSON Java数据绑定示例

public static void main(String[] args) throws IOException {
        //String url = "http://freemusicarchive.org/api/get/albums.json?api_key=60BLHNQCAOUFPIBZ&limit=2";//译者注:这个URL无法访问,换一个吧
    	String content="{\n" +
				"  \"title\" : \"作者提供的URL访问不了\",\n" +
				"  \"dataset\" : [ {\n" +
				"    \"album_id\" : \"1\",\n" +
				"    \"album_title\" : \"关注一下公众号嘛~\",\n" +
				"    \"tags\" : \"测试\",\n" +
				"    \"支付宝账号\" : \"wethinker_xiaomo@126.com\",\n" +
				"    \"公众号名字\" : \"落花流水存心阁\"\n" +
				"  }, {\n" +
				"    \"album_id\" : \"1\",\n" +
				"    \"album_title\" : \"关注一下公众号嘛~\",\n" +
				"    \"tags\" : \"测试\",\n" +
				"    \"支付宝账号\" : \"wethinker_xiaomo@126.com\",\n" +
				"    \"公众号名字\" : \"落花流水存心阁\"\n" +
				"  } ]\n" +
				"}";
        ObjectMapper mapper = new ObjectMapper();
        mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
        //Albums albums = mapper.readValue(new URL(url), Albums.class);
    	Albums albums = mapper.readValue(content, Albums.class);
        Dataset[] datasets = albums.getDataset();
        for (Dataset dataset : datasets) {
            System.out.println(dataset.getAlbum_title());
        }
    }

我们关闭了mapper在遇到未知属性时将break的特性。因此,如果json有10个属性但是你在bean里只指定了2个,那么其余8个属性将被忽略;

public class Albums {
    private String title;
    private Dataset[] dataset;
    public void setTitle(String title) {
        this.title = title;
    }
    public void setDataset(Dataset[] dataset) {
        this.dataset = dataset;
    }
    public String getTitle() {
        return title;
    }
    public Dataset[] getDataset() {
        return dataset;
    }
}
public class Dataset {
    private String album_id;
    private String album_title;
    private Map<String , Object> otherProperties = new HashMap<String , Object>();
    public String getAlbum_id() {
        return album_id;
    }
    public void setAlbum_id(String album_id) {
        this.album_id = album_id;
    }
    public String getAlbum_title() {
        return album_title;
    }
    public void setAlbum_title(String album_title) {
        this.album_title = album_title;
    }
    public Object get(String name) {
        return otherProperties.get(name);
    }
}

项目源码免费获取 个人博客,百度网盘地址+提取码,文件无密~

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值