Bael 361 jackson streaming (#1459)
* BAEL-361 tests for Streaming API * BAEL-361 do not use deprecated API * BAEL-361 return to not read whole json document, only needed field
This commit is contained in:
parent
a055ab5f81
commit
b01c2c5a94
|
@ -0,0 +1,119 @@
|
|||
package com.baeldung.jackson.streaming;
|
||||
|
||||
|
||||
import com.fasterxml.jackson.core.*;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import static junit.framework.Assert.assertNull;
|
||||
import static junit.framework.Assert.assertTrue;
|
||||
import static junit.framework.TestCase.assertEquals;
|
||||
|
||||
public class JacksonStreamingAPITest {
|
||||
|
||||
@Test
|
||||
public void givenJsonGenerator_whenAppendJsonToIt_thenGenerateJson() throws IOException {
|
||||
//given
|
||||
ByteArrayOutputStream stream = new ByteArrayOutputStream();
|
||||
JsonFactory jfactory = new JsonFactory();
|
||||
JsonGenerator jGenerator = jfactory.createGenerator(stream, JsonEncoding.UTF8);
|
||||
|
||||
//when
|
||||
jGenerator.writeStartObject();
|
||||
jGenerator.writeStringField("name", "Tom");
|
||||
jGenerator.writeNumberField("age", 25);
|
||||
jGenerator.writeFieldName("address");
|
||||
jGenerator.writeStartArray();
|
||||
jGenerator.writeString("Poland");
|
||||
jGenerator.writeString("5th avenue");
|
||||
jGenerator.writeEndArray();
|
||||
jGenerator.writeEndObject();
|
||||
jGenerator.close();
|
||||
|
||||
//then
|
||||
String json = new String(stream.toByteArray(), "UTF-8");
|
||||
assertEquals(json, "{\"name\":\"Tom\",\"age\":25,\"address\":[\"Poland\",\"5th avenue\"]}");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenJson_whenReadItUsingStreamAPI_thenShouldCreateProperJsonObject() throws IOException {
|
||||
//given
|
||||
String json = "{\"name\":\"Tom\",\"age\":25,\"address\":[\"Poland\",\"5th avenue\"]}";
|
||||
JsonFactory jfactory = new JsonFactory();
|
||||
JsonParser jParser = jfactory.createParser(json);
|
||||
|
||||
String parsedName = null;
|
||||
Integer parsedAge = null;
|
||||
List<String> addresses = new LinkedList<>();
|
||||
|
||||
//when
|
||||
while (jParser.nextToken() != JsonToken.END_OBJECT) {
|
||||
|
||||
String fieldname = jParser.getCurrentName();
|
||||
if ("name".equals(fieldname)) {
|
||||
jParser.nextToken();
|
||||
parsedName = jParser.getText();
|
||||
|
||||
}
|
||||
|
||||
if ("age".equals(fieldname)) {
|
||||
jParser.nextToken();
|
||||
parsedAge = jParser.getIntValue();
|
||||
|
||||
}
|
||||
|
||||
if ("address".equals(fieldname)) {
|
||||
jParser.nextToken();
|
||||
|
||||
while (jParser.nextToken() != JsonToken.END_ARRAY) {
|
||||
addresses.add(jParser.getText());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
jParser.close();
|
||||
|
||||
//then
|
||||
assertEquals(parsedName, "Tom");
|
||||
assertEquals(parsedAge, (Integer) 25);
|
||||
assertEquals(addresses, Arrays.asList("Poland", "5th avenue"));
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void givenJson_whenWantToExtractPartOfIt_thenShouldExtractOnlyNeededFieldWithoutGoingThroughWholeJSON() throws IOException {
|
||||
//given
|
||||
String json = "{\"name\":\"Tom\",\"age\":25,\"address\":[\"Poland\",\"5th avenue\"]}";
|
||||
JsonFactory jfactory = new JsonFactory();
|
||||
JsonParser jParser = jfactory.createParser(json);
|
||||
|
||||
String parsedName = null;
|
||||
Integer parsedAge = null;
|
||||
List<String> addresses = new LinkedList<>();
|
||||
|
||||
//when
|
||||
while (jParser.nextToken() != JsonToken.END_OBJECT) {
|
||||
|
||||
String fieldname = jParser.getCurrentName();
|
||||
|
||||
if ("age".equals(fieldname)) {
|
||||
jParser.nextToken();
|
||||
parsedAge = jParser.getIntValue();
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
jParser.close();
|
||||
|
||||
//then
|
||||
assertNull(parsedName);
|
||||
assertEquals(parsedAge, (Integer) 25);
|
||||
assertTrue(addresses.isEmpty());
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue