You may be looking for `JsonGenerator.copyCurrentEvent(parser)` (or
`copyCurrentStructure(parser)`) method....

-+ Tatu +-
On Sun, Nov 11, 2018 at 7:51 PM Niels Bertram <[email protected]> wrote:
>
> I am trying to stream JSON data read by a JsonParser to a JsonGenerator. Has 
> anyone ever come across an example that chains the 2 together? The only next 
> best thing I could come up with is write a "transform" method that would read 
> from parser and then write it to generator. It looks so terrifyingly generic, 
> surely this is not the first time someone would have to do this king of thing.
>
> Any pointers would be greatly appreciated.
>
> Cheers, Niels
>
>
>
> import org.junit.Test;
>
> import java.io.IOException;
> import java.io.InputStream;
> import java.io.StringWriter;
>
> import com.fasterxml.jackson.core.*;
>
> public class JsonStreamingTest {
>
>   @Test
>   public void streamJson() throws Exception {
>
>     String input = 
> convertStreamToString(getClass().getClassLoader().getResourceAsStream("files/simple.json"));
>
>     StringWriter result = new StringWriter();
>
>     JsonFactory factory = new JsonFactory();
>     JsonParser reader = factory.createParser(input);
>     JsonGenerator writer = 
> factory.createGenerator(result).useDefaultPrettyPrinter();
>
>     transform(reader, writer, 1);
>
>     writer.close();
>     reader.close();
>
>     System.out.println(result.toString());
>
>   }
>
>   private void transform(JsonParser parser, JsonGenerator generator, int 
> level) throws IOException {
>
>     while (parser.nextToken() != null) {
>
>       JsonToken token = parser.currentToken();
>
>       switch (token) {
>         case START_OBJECT:
>           generator.writeStartObject();
>           read(parser, generator, level + 1);
>           break;
>         case END_OBJECT:
>           generator.writeEndObject();
>           break;
>         case START_ARRAY:
>           generator.writeStartArray();
>           read(parser, generator, level + 1);
>         case END_ARRAY:
>           generator.writeEndArray();
>           break;
>         case FIELD_NAME:
>           String name = parser.currentName();
>           JsonToken value = parser.nextValue();
>           switch (value) {
>             case VALUE_NULL:
>               generator.writeNullField(name);
>               break;
>             case VALUE_TRUE:
>             case VALUE_FALSE:
>               generator.writeBooleanField(name, parser.getBooleanValue());
>               break;
>             case VALUE_STRING:
>               generator.writeStringField(name, parser.getValueAsString());
>               break;
>             case VALUE_NUMBER_INT:
>               generator.writeNumberField(name, parser.getValueAsInt());
>               break;
>             case VALUE_NUMBER_FLOAT:
>               generator.writeNumberField(name, parser.getFloatValue());
>               break;
>             case START_ARRAY:
>               generator.writeArrayFieldStart(name);
>               read(parser, generator, level + 1);
>               break;
>             case END_ARRAY:
>               generator.writeEndArray();
>             case START_OBJECT:
>               generator.writeObjectFieldStart(name);
>               read(parser, generator, level + 1);
>               break;
>             case END_OBJECT:
>               generator.writeEndObject();
>               break;
>             default:
>               throw new RuntimeException("cannot process this type " + 
> token.toString());          }
>           break;
>         case VALUE_STRING:
>           generator.writeString(parser.getValueAsString());
>           break;
>         default:
>           throw new RuntimeException("cannot process this type " + 
> token.toString());
>       }
>     }
>
>   }
>
>   private static String convertStreamToString(InputStream stream) {
>     java.util.Scanner s = new java.util.Scanner(stream).useDelimiter("\\A");
>     return s.hasNext() ? s.next() : "";
>   }
>
> }
>
>
> --
> You received this message because you are subscribed to the Google Groups 
> "jackson-user" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> For more options, visit https://groups.google.com/d/optout.

-- 
You received this message because you are subscribed to the Google Groups 
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to