bson4jackson使用教程

源码获取地址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());
    }

猜你喜欢

转载自blog.csdn.net/tianxionj/article/details/53160337