源码获取地址https://github.com/michel-kraemer/bson4jackson
使用maven管理获取jar
<dependencies>
<dependency>
<groupId>de.undercouch</groupId>
<artifactId>bson4jackson</artifactId>
<version>2.7.0</version>
</dependency>
</dependencies>
1.创建Person类
public class Person {
private String _name;
public void setName(String name) {
_name = name;
}
public String getName() {
return _name;
}
}
2.可以使用ObjectMapper 快速序列化对象
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import com.fasterxml.jackson.databind.ObjectMapper;
import de.undercouch.bson4jackson.BsonFactory;
public class ObjectMapperSample {
public static void main(String[] args) throws Exception {
//create dummy POJO
Person bob = new Person();
bob.setName("Bob");
//serialize data
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectMapper mapper = new ObjectMapper(new BsonFactory());
mapper.writeValue(baos, bob);
//deserialize data
ByteArrayInputStream bais = new ByteArrayInputStream(
baos.toByteArray());
Person clone_of_bob = mapper.readValue(bais, Person.class);
assert bob.getName().equals(clone_of_bob.getName());
}
}
3.也可以使用jackson’s streaming API 序列化和反序列化对象
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import de.undercouch.bson4jackson.BsonFactory;
public class ManualSample {
public static void main(String[] args) throws Exception {
//create dummy POJO
Person bob = new Person();
bob.setName("Bob");
//create factory
BsonFactory factory = new BsonFactory();
//serialize data
ByteArrayOutputStream baos = new ByteArrayOutputStream();
JsonGenerator gen = factory.createJsonGenerator(baos);
gen.writeStartObject();
gen.writeFieldName("name");
gen.writeString(bob.getName());
gen.close();
//deserialize data
ByteArrayInputStream bais = new ByteArrayInputStream(
baos.toByteArray());
JsonParser parser = factory.createJsonParser(bais);
Person clone_of_bob = new Person();
parser.nextToken();
while (parser.nextToken() != JsonToken.END_OBJECT) {
String fieldname = parser.getCurrentName();
parser.nextToken();
if ("name".equals(fieldname)) {
clone_of_bob.setName(parser.getText());
}
}
assert bob.getName().equals(clone_of_bob.getName());
}
}
4.读取bson文件
@Test
public void readBSONFile() throws Exception {
InputStream is = getClass().getResourceAsStream("test.bson");
try {
ObjectMapper mapper = new ObjectMapper(new BsonFactory());
@SuppressWarnings("deprecation")
MappingIterator<BSONObject> iterator =
mapper.reader(BasicBSONObject.class).readValues(is);
BSONObject o = null;
while (iterator.hasNext()) {
assertNull(o);
BSONObject object = iterator.next();
assertNotNull(object);
o = object;
}
assertEquals("Hello world", o.get("message"));
assertEquals(10.0, o.get("size"));
assertTrue(o.keySet().contains("_id"));
assertEquals(3, o.keySet().size());
} finally {
is.close();
}
}
5.序列化为文本文件
@Test
public void parseAsText() throws Exception {
BSONObject o = new BasicBSONObject();
o.put("Float", 5.0f);
o.put("Int32", 1234);
BSONEncoder enc = new BasicBSONEncoder();
byte[] b = enc.encode(o);
ByteArrayInputStream bais = new ByteArrayInputStream(b);
BsonFactory fac = new BsonFactory();
BsonParser dec = fac.createParser(bais);
assertEquals(JsonToken.START_OBJECT, dec.nextToken());
assertEquals(JsonToken.FIELD_NAME, dec.nextToken());
assertEquals("Float", dec.getCurrentName());
assertEquals(JsonToken.VALUE_NUMBER_FLOAT, dec.nextToken());
assertEquals(5.0f, dec.getFloatValue(), 0.00001);
assertEquals("5.0", dec.getText());
assertEquals(JsonToken.FIELD_NAME, dec.nextToken());
assertEquals("Int32", dec.getCurrentName());
assertEquals(JsonToken.VALUE_NUMBER_INT, dec.nextToken());
assertEquals(1234, dec.getIntValue());
assertEquals("1234", dec.getText());
assertEquals(JsonToken.END_OBJECT, dec.nextToken());
}