Last active
January 15, 2019 10:32
-
-
Save kamikat/41666ade58b7e5d2f38f30dda9cccd0d to your computer and use it in GitHub Desktop.
Clone a com.squareup.moshi.JsonReader object
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import com.squareup.moshi.JsonReader; | |
| import com.squareup.moshi.JsonWriter; | |
| import okio.Buffer; | |
| import okio.BufferedSink; | |
| import java.io.IOException; | |
| public final class MoshiHelper { | |
| public static void dump(JsonReader reader, BufferedSink sink) throws IOException { | |
| JsonWriter writer = JsonWriter.of(sink); | |
| int nested = 0; | |
| while (reader.peek() != JsonReader.Token.END_DOCUMENT) { | |
| switch (reader.peek()) { | |
| case BEGIN_ARRAY: | |
| nested++; | |
| reader.beginArray(); | |
| writer.beginArray(); | |
| break; | |
| case END_ARRAY: | |
| reader.endArray(); | |
| writer.endArray(); | |
| if (0 == --nested) return; | |
| break; | |
| case BEGIN_OBJECT: | |
| nested++; | |
| reader.beginObject(); | |
| writer.beginObject(); | |
| break; | |
| case END_OBJECT: | |
| reader.endObject(); | |
| writer.endObject(); | |
| if (0 == --nested) return; | |
| break; | |
| case NAME: | |
| writer.name(reader.nextName()); | |
| break; | |
| case NUMBER: | |
| try { | |
| writer.value(reader.nextLong()); | |
| } catch (Exception ignored) { | |
| writer.value(reader.nextDouble()); | |
| } | |
| break; | |
| case BOOLEAN: | |
| writer.value(reader.nextBoolean()); | |
| break; | |
| case STRING: | |
| writer.value(reader.nextString()); | |
| break; | |
| case NULL: | |
| reader.nextNull(); | |
| writer.nullValue(); | |
| break; | |
| } | |
| } | |
| } | |
| public static JsonReader copyOf(Buffer buffer) { | |
| Buffer forked = new Buffer(); | |
| buffer.copyTo(forked, 0, buffer.size()); | |
| return JsonReader.of(forked); | |
| } | |
| } |
Author
Thanks a lot for the effort!
Looks like they've added this feature with a peekJson():
square/moshi@69d4f40#diff-4ac32a78649ca5bdd8e0ba38b7006a1eR14
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
To clone a JsonReader:
JsonReaderinto aJsonWriterthat writes to a bufferJsonReaderfrom the buffer.