@Override public void write(Document document, OutputStream jsonStream) throws IOException { try (JsonGenerator jsonGenerator = factory.createGenerator(jsonStream)) { configure(jsonGenerator); writeDocument(document, jsonGenerator); } }
@Override public void write(Array array, OutputStream jsonStream) throws IOException { try (JsonGenerator jsonGenerator = factory.createGenerator(jsonStream)) { configure(jsonGenerator); writeArray(array, jsonGenerator); } }
protected void writeArray(Array array, JsonGenerator generator) throws IOException { generator.writeStartArray(); try { array.streamValues().forEach((value) -> { try { writeValue(value, generator); } catch (IOException e) { throw new WritingError(e); } }); generator.writeEndArray(); } catch (WritingError e) { throw e.wrapped(); } }
@Test public void shouldWriteDocumentWithSingleField() throws Exception { doc.set("field", "value"); after = reader.read(writer.write(doc)); assertThat(after.getString("field")).isEqualTo("value"); assertThat(after.size()).isEqualTo(1); }
break; case DOCUMENT: writeDocument(value.asDocument(), generator); break; case ARRAY: writeArray(value.asArray(), generator); break;
@Test public void shouldWriteDocumentWithSingleField() throws Exception { array.add("value1"); after = reader.readArray(writer.write(array)); assertThat(after.get(0)).isEqualTo("value1"); assertThat(after.size()).isEqualTo(1); }
break; case DOCUMENT: writeDocument(value.asDocument(), generator); break; case ARRAY: writeArray(value.asArray(), generator); break;
@Override public void write(Document document, Writer jsonWriter) throws IOException { try (JsonGenerator jsonGenerator = factory.createGenerator(jsonWriter)) { configure(jsonGenerator); writeDocument(document, jsonGenerator); } }
@Override public void write(Array array, Writer jsonWriter) throws IOException { try (JsonGenerator jsonGenerator = factory.createGenerator(jsonWriter)) { configure(jsonGenerator); writeArray(array, jsonGenerator); } }
@Test public void shouldWriteDocumentWithTwoFields() throws Exception { array.add("value1"); array.add("value2"); after = reader.readArray(writer.write(array)); assertThat(after.get(0)).isEqualTo("value1"); assertThat(after.get(1)).isEqualTo("value2"); assertThat(after.size()).isEqualTo(2); }
protected void writeDocument(Document document, JsonGenerator generator) throws IOException { generator.writeStartObject(); try { document.stream().forEach((field) -> { try { generator.writeFieldName(field.getName().toString()); writeValue(field.getValue(), generator); } catch (IOException e) { throw new WritingError(e); } }); generator.writeEndObject(); } catch (WritingError e) { throw e.wrapped(); } }
@Override public byte[] writeAsBytes(Document document) { try (ByteArrayOutputStream stream = new ByteArrayOutputStream()) { try (JsonGenerator jsonGenerator = factory.createGenerator(stream, JsonEncoding.UTF8)) { configure(jsonGenerator); writeDocument(document, jsonGenerator); } return stream.toByteArray(); } catch (IOException e) { throw new RuntimeException(e); } }
@Override public String write(Array array) throws IOException { StringWriter writer = new StringWriter(); try (JsonGenerator jsonGenerator = factory.createGenerator(writer)) { configure(jsonGenerator); writeArray(array, jsonGenerator); } return writer.getBuffer().toString(); }
@Test public void shouldWriteDocumentWithTwoFields() throws Exception { doc.set("field1", "value"); doc.set("field2", 22); after = reader.read(writer.write(doc)); assertThat(after.getString("field1")).isEqualTo("value"); assertThat(after.getInteger("field2")).isEqualTo(22); assertThat(after.size()).isEqualTo(2); }
protected void writeArray(Array array, JsonGenerator generator) throws IOException { generator.writeStartArray(); try { array.streamValues().forEach((value) -> { try { writeValue(value, generator); } catch (IOException e) { throw new WritingError(e); } }); generator.writeEndArray(); } catch (WritingError e) { throw e.wrapped(); } }
@Override public String write(Document document) throws IOException { StringWriter writer = new StringWriter(); try (JsonGenerator jsonGenerator = factory.createGenerator(writer)) { configure(jsonGenerator); writeDocument(document, jsonGenerator); } return writer.getBuffer().toString(); }
@Override public void write(Array array, OutputStream jsonStream) throws IOException { try (JsonGenerator jsonGenerator = factory.createGenerator(jsonStream)) { configure(jsonGenerator); writeArray(array, jsonGenerator); } }
@Test public void shouldWriteDocumentWithNestedDocument() throws Exception { array.add("value1"); array.add("value2"); array.add(Document.create("a","A","b","B")); after = reader.readArray(writer.write(array)); assertThat(after.get(0)).isEqualTo("value1"); assertThat(after.get(1)).isEqualTo("value2"); assertThat(after.size()).isEqualTo(3); Document nested = after.get(2).asDocument(); assertThat(nested.getString("a")).isEqualTo("A"); assertThat(nested.getString("b")).isEqualTo("B"); assertThat(nested.size()).isEqualTo(2); }
protected void writeDocument(Document document, JsonGenerator generator) throws IOException { generator.writeStartObject(); try { document.stream().forEach((field) -> { try { generator.writeFieldName(field.getName().toString()); writeValue(field.getValue(), generator); } catch (IOException e) { throw new WritingError(e); } }); generator.writeEndObject(); } catch (WritingError e) { throw e.wrapped(); } }
@Override public void write(Document document, OutputStream jsonStream) throws IOException { try (JsonGenerator jsonGenerator = factory.createGenerator(jsonStream)) { configure(jsonGenerator); writeDocument(document, jsonGenerator); } }