java fasterxml_JackSon fasterxml学习

概述

Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的JavaJson解析器”。

Jackson框架包含了3个核心库:streaming,databind,annotations.Jackson还包含了其它数据处理类库,此外不作说明。

Jackson版本: 1.x (目前版本从1.1~1.9)与2.x。1.x与2.x从包的命名上可以看出来,1.x的类库中,包命名以:org.codehaus.jackson.xxx开头,而2.x类库中包命令:com.fastxml.jackson.xxx开头

准备工作

本文所有程序都基于JDK1.7,依赖jackon的三个核心类库:

jackson-core-2.5.3.jar

jackson-annotations-2.5.3.jar

jackson-databind-2.5.3.jar

Jackson处理Json

Jackson提供了三种可选的Json处理方法:流式API(Streaming API) 、树模型(Tree Model)、数据绑定(Data Binding)。从使用角度来看,比较一下这三种处理Json的方式的特性:

Streaming API:是效率最高的处理方式(开销低、读写速度快,但程序编写复杂度高)

Tree Model:是最灵活的处理方式

Data Binding:是最常用的处理方式

下面我们通过例子程序分别使用DataBinding,TreeModel,Streaming的方式来创建和解析Json字符串

1.DataBinding处理Json

Jackson支持Java对象与Json之间的相互转化。java对象序列化为json字符串,json字符串也可以反序列化为相同的java对象。

(1)java对象转化成json:

Province.java

packagecom.jackson.json.databinding;

publicclassProvince {

publicString name;

publicintpopulation;

publicString[] city;

}

save_snippets.pngpackage com.jackson.json.databinding;

public class Province {

public String name;

public int population;

public String[] city;

}

Country.java

packagecom.jackson.json.databinding;

importjava.util.ArrayList;

importjava.util.Arrays;

importjava.util.Date;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

publicclassCountry {

// 注意:被序列化的bean的private属性字段需要创建getter方法或者属性字段应该为public

privateString country_id;

privateDate birthDate;

privateList nation =newArrayList();

privateString[] lakes;

privateList provinces =newArrayList();

privateMap traffic =newHashMap();

publicCountry() {

// TODO Auto-generated constructor stub

}

publicCountry(String countryId) {

this.country_id = countryId;

}

publicString getCountry_id() {

returncountry_id;

}

publicvoidsetCountry_id(String country_id) {

this.country_id = country_id;

}

publicDate getBirthDate() {

returnbirthDate;

}

publicvoidsetBirthDate(Date birthDate) {

this.birthDate = birthDate;

}

publicList getNation() {

returnnation;

}

publicvoidsetNation(List nation) {

this.nation = nation;

}

publicString[] getLakes() {

returnlakes;

}

publicvoidsetLakes(String[] lakes) {

this.lakes = lakes;

}

publicInteger get(String key) {

returntraffic.get(key);

}

publicMap getTraffic() {

returntraffic;

}

publicvoidsetTraffic(Map traffic) {

this.traffic = traffic;

}

publicvoidaddTraffic(String key, Integer value) {

traffic.put(key, value);

}

publicList getProvinces() {

returnprovinces;

}

publicvoidsetProvinces(List provinces) {

this.provinces = provinces;

}

@Override

publicString toString() {

return“Country [country_id=”+ country_id +“, birthDate=”+ birthDate

+ ”, nation=”+ nation +“, lakes=”+ Arrays.toString(lakes)

+ ”, province=”+ provinces +“, traffic=”+ traffic +“]”;

}

}

save_snippets.pngpackage com.jackson.json.databinding;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Date;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

public class Country {

// 注意:被序列化的bean的private属性字段需要创建getter方法或者属性字段应该为public

private String country_id;

private Date birthDate;

private List nation = new ArrayList();

private String[] lakes;

private List provinces = new ArrayList();

private Map traffic = new HashMap();

public Country() {

// TODO Auto-generated constructor stub

}

public Country(String countryId) {

this.country_id = countryId;

}

public String getCountry_id() {

return country_id;

}

public void setCountry_id(String country_id) {

this.country_id = country_id;

}

public Date getBirthDate() {

return birthDate;

}

public void setBirthDate(Date birthDate) {

this.birthDate = birthDate;

}

public List<String> getNation() {

return nation;

}

public void setNation(List<String> nation) {

this.nation = nation;

}

public String[] getLakes() {

return lakes;

}

public void setLakes(String[] lakes) {

this.lakes = lakes;

}

public Integer get(String key) {

return traffic.get(key);

}

public Map<String, Integer> getTraffic() {

return traffic;

}

public void setTraffic(Map<String, Integer> traffic) {

this.traffic = traffic;

}

public void addTraffic(String key, Integer value) {

traffic.put(key, value);

}

public List<Province> getProvinces() {

return provinces;

}

public void setProvinces(List<Province> provinces) {

this.provinces = provinces;

}

@Override

public String toString() {

return "Country [country_id=" + country_id + ", birthDate=" + birthDate

+ ", nation=" + nation + ", lakes=" + Arrays.toString(lakes)

+ ", province=" + provinces + ", traffic=" + traffic + "]";

}

}JavaBeanSerializeToJson.java

packagecom.jackson.json.databinding;

importjava.io.File;

importjava.text.SimpleDateFormat;

importjava.util.ArrayList;

importjava.util.List;

importcom.fasterxml.jackson.annotation.JsonInclude.Include;

importcom.fasterxml.jackson.databind.ObjectMapper;

importcom.fasterxml.jackson.databind.SerializationFeature;

publicclassJavaBeanSerializeToJson {

publicstaticvoidconvert()throwsException {

// 使用ObjectMapper来转化对象为Json

ObjectMapper mapper = newObjectMapper();

// 添加功能,让时间格式更具有可读性

SimpleDateFormat dateFormat = newSimpleDateFormat(“yyyy-MM-dd”);

mapper.setDateFormat(dateFormat);

Country country = newCountry(“China”);

country.setBirthDate(dateFormat.parse(”1949-10-01”));

country.setLakes(newString[] {“Qinghai Lake”,“Poyang Lake”,

”Dongting Lake”,“Taihu Lake”});

List nation = newArrayList();

nation.add(”Han”);

nation.add(”Meng”);

nation.add(”Hui”);

nation.add(”WeiWuEr”);

nation.add(”Zang”);

country.setNation(nation);

Province province = newProvince();

province.name = ”Shanxi”;

province.population = 37751200;

Province province2 = newProvince();

province2.name = ”ZheJiang”;

province2.population = 55080000;

List provinces = newArrayList();

provinces.add(province);

provinces.add(province2);

country.setProvinces(provinces);

country.addTraffic(”Train(KM)”,112000);

country.addTraffic(”HighWay(KM)”,4240000);

// 为了使JSON视觉上的可读性,增加一行如下代码,注意,在生产中不需要这样,因为这样会增大Json的内容

mapper.configure(SerializationFeature.INDENT_OUTPUT, true);

// 配置mapper忽略空属性

<
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
com.fasterxml.jackson.databind是Java中的一个库,用于处理JSON数据的序列化和反序列化。它是Jackson库的一部分,提供了一组用于操作和处理JSON数据的类和方法。 以下是com.fasterxml.jackson.databind的一些常见用法和示例: 1. 将Java对象序列化为JSON字符串: ```java import com.fasterxml.jackson.databind.ObjectMapper; // 创建ObjectMapper对象 ObjectMapper objectMapper = new ObjectMapper(); // 将Java对象转换为JSON字符串 String json = objectMapper.writeValueAsString(object); ``` 2. 将JSON字符串反序列化为Java对象: ```java import com.fasterxml.jackson.databind.ObjectMapper; // 创建ObjectMapper对象 ObjectMapper objectMapper = new ObjectMapper(); // 将JSON字符串转换为Java对象 Object object = objectMapper.readValue(json, Object.class); ``` 3. 自定义JSON序列化和反序列化规则: ```java import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import com.fasterxml.jackson.databind.ser.std.StdSerializer; import com.fasterxml.jackson.databind.deser.std.StdDeserializer; // 创建ObjectMapper对象 ObjectMapper objectMapper = new ObjectMapper(); // 创建自定义序列化器 StdSerializer<MyClass> serializer = new StdSerializer<MyClass>(MyClass.class) { @Override public void serialize(MyClass value, JsonGenerator gen, SerializerProvider provider) throws IOException { // 自定义序列化逻辑 } }; // 创建自定义反序列化器 StdDeserializer<MyClass> deserializer = new StdDeserializer<MyClass>(MyClass.class) { @Override public MyClass deserialize(JsonParser p, DeserializationContext ctxt) throws IOException { // 自定义反序列化逻辑 } }; // 创建SimpleModule对象,并注册自定义序列化器和反序列化器 SimpleModule module = new SimpleModule(); module.addSerializer(MyClass.class, serializer); module.addDeserializer(MyClass.class, deserializer); // 将SimpleModule对象注册到ObjectMapper中 objectMapper.registerModule(module); ``` 以上是com.fasterxml.jackson.databind库的一些基本用法和示例。你可以根据具体的需求和场景来使用这个库进行JSON数据的处理和操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值