switch (peek()) { case BEGIN_ARRAY: List<Object> list = new ArrayList<>(); beginArray(); while (hasNext()) { list.add(readJsonValue()); endArray(); return list; beginObject(); while (hasNext()) { String name = nextName(); Object value = readJsonValue(); Object replaced = map.put(name, value); if (replaced != null) { throw new JsonDataException("Map key '" + name + "' has multiple values at path " + getPath() + ": " + replaced + " and " + value); endObject(); return map; return nextString(); return nextDouble(); return nextBoolean(); return nextNull();
@CheckReturnValue public final @Nullable T fromJson(String string) throws IOException { JsonReader reader = JsonReader.of(new Buffer().writeUtf8(string)); T result = fromJson(reader); if (!isLenient() && reader.peek() != JsonReader.Token.END_DOCUMENT) { throw new JsonDataException("JSON document was not fully consumed."); } return result; }
@Override public @Nullable M fromJson(JsonReader in) throws IOException { if (in.peek() == JsonReader.Token.NULL) { in.nextNull(); return null; in.beginObject(); while (in.hasNext()) { int index = in.selectName(options); if (index == -1) { in.skipName(); in.skipValue(); continue; in.skipValue(); continue; in.endObject(); return builder.build();
@Override public T fromJson(JsonReader reader) throws IOException { int index = reader.selectString(options); if (index != -1) return constants[index]; reader.nextString(); return defaultValue; }
@Override public T fromJson(JsonReader reader) throws IOException { int index = reader.selectString(options); if (index != -1) return constants[index]; // We can consume the string safely, we are terminating anyway. String path = reader.getPath(); String name = reader.nextString(); throw new JsonDataException("Expected one of " + Arrays.asList(nameStrings) + " but was " + name + " at path " + path); }
@Override public SortedSet<T> fromJson(JsonReader reader) throws IOException { TreeSet<T> result = new TreeSet<>(); reader.beginArray(); while (reader.hasNext()) { result.add(elementAdapter.fromJson(reader)); } reader.endArray(); return result; }
@Override public Folder fromJson(@NonNull JsonReader in) throws IOException { if (in.peek() == JsonReader.Token.NULL) { in.nextNull(); return null; } Folder folder = new Folder(); in.beginObject(); while (in.hasNext()) { String name = in.nextName(); switch (name) { case "id": folder.setId(in.nextLong()); break; case "name": folder.setName(in.nextString()); break; default: Log.w(TAG, "Unknown value in folder json: " + name); in.skipValue(); break; } } in.endObject(); return folder; } }
private Friend moshiFriend(com.squareup.moshi.JsonReader reader) throws IOException { Friend friend = new Friend(); reader.beginObject(); while (reader.hasNext()) { switch (reader.nextName()) { case "id": friend.id = reader.nextString(); break; case "name": friend.name = reader.nextString(); break; default: reader.skipValue(); break; } } reader.endObject(); return friend; }
@Override public GeoCode fromJson(JsonReader reader) throws IOException { // Using nulls to ensure the values where set. Double latitude = null; Double longitude = null; int accuracy = 0; reader.beginObject(); while (reader.hasNext()) { String name = reader.nextName(); if (reader.peek() == Token.NULL) { reader.skipValue(); continue; } if ("accuracy" .equals(name)) { accuracy = reader.nextInt(); } else if ("latitude" .equals(name)) { latitude = reader.nextDouble(); } else if ("longitude" .equals(name)) { longitude = reader.nextDouble(); } else { reader.skipValue(); } } reader.endObject(); if (latitude == null || longitude == null) return null; return new GeoCode(accuracy, latitude, longitude); }
@Override @Nullable public Span fromJson(JsonReader reader) throws IOException { Span.Builder result = Span.builder(); reader.beginObject(); while (reader.hasNext()) { String nextName = reader.nextName(); if (reader.peek() == JsonReader.Token.NULL) { reader.skipValue(); continue; String traceId = reader.nextString(); if (traceId.length() == 32) { result.traceIdHigh(lowerHexToUnsignedLong(traceId, 0)); break; case "name": result.name(reader.nextString()); break; case "id": result.id(lowerHexToUnsignedLong(reader.nextString())); break; case "parentId": result.parentId(lowerHexToUnsignedLong(reader.nextString())); break; case "timestamp": result.timestamp(reader.nextLong()); break; case "duration": result.duration(reader.nextLong()); break;
reader.beginObject(); while (reader.hasNext()) { switch (reader.nextName()) { case "_id": user._id = reader.nextString(); break; case "index": user.index = reader.nextInt(); break; case "guid": user.guid = reader.nextString(); break; case "isActive": user.isActive = reader.nextBoolean(); break; case "balance": user.balance = reader.nextString(); break; case "picture": user.picture = reader.nextString(); break; case "age": user.age = reader.nextInt(); break; case "eyeColor": user.eyeColor = reader.nextString(); break; case "name":
@Override public List<List<XingUser>> fromJson(JsonReader reader) throws IOException { List<List<XingUser>> paths = new LinkedList<>(); reader.beginArray(); while (reader.hasNext()) { reader.beginObject(); while (reader.hasNext()) { String name = reader.nextName(); if ("users".equals(name)) { paths.add(pathAdapter.fromJson(reader)); } else { reader.skipValue(); } } reader.endObject(); } reader.endArray(); return paths; }
private int labelIndex(JsonReader reader) throws IOException { reader.beginObject(); while (reader.hasNext()) { if (reader.selectName(labelKeyOptions) == -1) { reader.skipName(); reader.skipValue(); continue; } int labelIndex = reader.selectString(labelOptions); if (labelIndex == -1 && !defaultValueSet) { throw new JsonDataException("Expected one of " + labels + " for key '" + labelKey + "' but found '" + reader.nextString() + "'. Register a subtype for this label."); } reader.close(); return labelIndex; } throw new JsonDataException("Missing label for " + labelKey); }
String string = null; BinaryAnnotation.Type type = BinaryAnnotation.Type.STRING; reader.beginObject(); while (reader.hasNext()) { switch (reader.nextName()) { case "key": result.key(reader.nextString()); break; case "value": switch (reader.peek()) { case BOOLEAN: type = BinaryAnnotation.Type.BOOL; result.value(reader.nextBoolean() ? new byte[] {1} : new byte[] {0}); break; case STRING: string = reader.nextString(); break; case NUMBER: number = reader.nextString(); break; default: throw new JsonDataException( "Expected value to be a boolean, string or number but was " + reader.peek() + " at path " + reader.getPath()); type = BinaryAnnotation.Type.valueOf(reader.nextString()); break; case "endpoint":
@Override public TimeZone fromJson(JsonReader reader) throws IOException { String timeZoneName = null; Double utcOffset = null; reader.beginObject(); while (reader.hasNext()) { String name = reader.nextName(); if (reader.peek() == Token.NULL) { reader.skipValue(); continue; } if ("name" .equals(name)) { timeZoneName = reader.nextString(); } else if ("utc_offset" .equals(name)) { utcOffset = reader.nextDouble(); } else { reader.skipValue(); } } reader.endObject(); if (timeZoneName != null && utcOffset != null) return new TimeZone(timeZoneName, utcOffset); return null; }
@Override public T fromJson(JsonReader reader) throws IOException { T result; try { result = classFactory.newInstance(); } catch (InstantiationException e) { throw new RuntimeException(e); } catch (InvocationTargetException e) { throw Util.rethrowCause(e); } catch (IllegalAccessException e) { throw new AssertionError(); } try { reader.beginObject(); while (reader.hasNext()) { int index = reader.selectName(options); if (index == -1) { reader.skipName(); reader.skipValue(); continue; } fieldsArray[index].read(reader, result); } reader.endObject(); return result; } catch (IllegalAccessException e) { throw new AssertionError(); } }
@Override public @Nullable T fromJson(JsonReader reader) throws IOException { int index = reader.selectString(options); if (index != -1) return constants[index]; String path = reader.getPath(); if (!useFallbackValue) { String name = reader.nextString(); throw new JsonDataException("Expected one of " + Arrays.asList(nameStrings) + " but was " + name + " at path " + path); } if (reader.peek() != JsonReader.Token.STRING) { throw new JsonDataException( "Expected a string but was " + reader.peek() + " at path " + path); } reader.skipValue(); return fallbackValue; }
@Override public String fromJson(JsonReader reader) throws IOException { return reader.nextString(); }
@Override public Map<K, V> fromJson(JsonReader reader) throws IOException { LinkedHashTreeMap<K, V> result = new LinkedHashTreeMap<>(); reader.beginObject(); while (reader.hasNext()) { reader.promoteNameToValue(); K name = keyAdapter.fromJson(reader); V value = valueAdapter.fromJson(reader); V replaced = result.put(name, value); if (replaced != null) { throw new JsonDataException("Map key '" + name + "' has multiple values at path " + reader.getPath() + ": " + replaced + " and " + value); } } reader.endObject(); return result; }