下面列出了怎么用com.google.gson.internal.LazilyParsedNumber的API类实例代码及写法,或者点击链接到github查看源代码。
protected int getRange(Object object) {
if (!getters.contains("range")) {
return 0;
}
try {
Object rangeObj = null;
rangeObj = getters.get("range").invoke(Object.class, object, object);
if (rangeObj instanceof LazilyParsedNumber) {
return ((LazilyParsedNumber)rangeObj).intValue();
} else if (rangeObj instanceof Double) {
return (int)((Double)rangeObj + 0.5);
} else if (rangeObj instanceof Integer) {
return (Integer)rangeObj;
}
} catch (GetterException ex) {
}
return 0;
}
private static WritableMap fromJsonObject(JsonObject object) {
WritableMap result = new WritableNativeMap();
for (Map.Entry<String, JsonElement> entry : object.entrySet()) {
Object value = fromJson(entry.getValue());
if (value instanceof WritableMap) {
result.putMap(entry.getKey(), (WritableMap) value);
} else if (value instanceof WritableArray) {
result.putArray(entry.getKey(), (WritableArray) value);
} else if (value instanceof String) {
result.putString(entry.getKey(), (String) value);
} else if (value instanceof LazilyParsedNumber) {
result.putInt(entry.getKey(), ((LazilyParsedNumber) value).intValue());
} else if (value instanceof Integer) {
result.putInt(entry.getKey(), (Integer) value);
} else if (value instanceof Double) {
result.putDouble(entry.getKey(), (Double) value);
} else if (value instanceof Boolean) {
result.putBoolean(entry.getKey(), (Boolean) value);
} else {
Log.d("ArgumentUtils", "Unknown type: " + value.getClass().getName());
result.putNull(entry.getKey());
}
}
return result;
}
private static WritableArray fromJsonArray(JsonArray arr) {
WritableArray result = new WritableNativeArray();
for (JsonElement el : arr) {
Object item = fromJson(el);
if (item instanceof WritableMap) {
result.pushMap((WritableMap) item);
} else if (item instanceof WritableArray) {
result.pushArray((WritableArray) item);
} else if (item instanceof String) {
result.pushString((String) item);
} else if (item instanceof LazilyParsedNumber) {
result.pushInt(((LazilyParsedNumber) item).intValue());
} else if (item instanceof Integer) {
result.pushInt((Integer) item);
} else if (item instanceof Double) {
result.pushDouble((Double) item);
} else if (item instanceof Boolean) {
result.pushBoolean((Boolean) item);
} else {
Log.d("ArgumentUtils", "Unknown type: " + item.getClass().getName());
result.pushNull();
}
}
return result;
}
public JsonElement read(JsonReader in) throws IOException {
switch (in.peek()) {
case NUMBER:
return new JsonPrimitive(new LazilyParsedNumber(in.nextString()));
case BOOLEAN:
return new JsonPrimitive(Boolean.valueOf(in.nextBoolean()));
case STRING:
return new JsonPrimitive(in.nextString());
case NULL:
in.nextNull();
return JsonNull.INSTANCE;
case BEGIN_ARRAY:
JsonElement array = new JsonArray();
in.beginArray();
while (in.hasNext()) {
array.add(read(in));
}
in.endArray();
return array;
case BEGIN_OBJECT:
JsonElement object = new JsonObject();
in.beginObject();
while (in.hasNext()) {
object.add(in.nextName(), read(in));
}
in.endObject();
return object;
default:
throw new IllegalArgumentException();
}
}
public Number read(JsonReader in) throws IOException {
JsonToken jsonToken = in.peek();
switch (jsonToken) {
case NUMBER:
return new LazilyParsedNumber(in.nextString());
case NULL:
in.nextNull();
return null;
default:
throw new JsonSyntaxException("Expecting number, got: " + jsonToken);
}
}
private static WritableMap fromJsonObject(JsonObject object) {
WritableMap result = new WritableNativeMap();
for (Map.Entry<String, JsonElement> entry : object.entrySet()) {
Object value = fromJson(entry.getValue());
if (value instanceof WritableMap) {
result.putMap(entry.getKey(), (WritableMap) value);
} else if (value instanceof WritableArray) {
result.putArray(entry.getKey(), (WritableArray) value);
} else if (value instanceof String) {
result.putString(entry.getKey(), (String) value);
} else if (value instanceof LazilyParsedNumber) {
result.putInt(entry.getKey(), ((LazilyParsedNumber) value).intValue());
} else if (value instanceof Integer) {
result.putInt(entry.getKey(), (Integer) value);
} else if (value instanceof Double) {
result.putDouble(entry.getKey(), (Double) value);
} else if (value instanceof Boolean) {
result.putBoolean(entry.getKey(), (Boolean) value);
} else {
Log.d("ArgumentUtils", "Unknown type: " + value.getClass().getName());
result.putNull(entry.getKey());
}
}
return result;
}
private static WritableArray fromJsonArray(JsonArray arr) {
WritableArray result = new WritableNativeArray();
for (JsonElement el : arr) {
Object item = fromJson(el);
if (item instanceof WritableMap) {
result.pushMap((WritableMap) item);
} else if (item instanceof WritableArray) {
result.pushArray((WritableArray) item);
} else if (item instanceof String) {
result.pushString((String) item);
} else if (item instanceof LazilyParsedNumber) {
result.pushInt(((LazilyParsedNumber) item).intValue());
} else if (item instanceof Integer) {
result.pushInt((Integer) item);
} else if (item instanceof Double) {
result.pushDouble((Double) item);
} else if (item instanceof Boolean) {
result.pushBoolean((Boolean) item);
} else {
Log.d("ArgumentUtils", "Unknown type: " + item.getClass().getName());
result.pushNull();
}
}
return result;
}
@Nullable protected Number getAsNumber() {
if (isString()) {
return new LazilyParsedNumber((String) value);
} else if (isNumber()) {
return (Number) value;
} else {
return null;
}
}
/** Query with sort is successful. */
@Test
public void queryWithSortIsSuccessful() {
QueryOptions.Builder queryBuilder = new QueryOptions.Builder(environmentId, collectionId);
String sortList = "field";
queryBuilder.sort(sortList);
QueryResponse queryResponse = discovery.query(queryBuilder.build()).execute().getResult();
assertTrue(queryResponse.getResults().size() > 1);
int v0 = ((LazilyParsedNumber) queryResponse.getResults().get(0).get("field")).intValue();
int v1 = ((LazilyParsedNumber) queryResponse.getResults().get(1).get("field")).intValue();
assertTrue(v0 <= v1);
}
public Number getAsNumber()
{
if (b instanceof String)
{
return new LazilyParsedNumber((String)b);
} else
{
return (Number)b;
}
}
@Override
public Number read(JsonReader in) throws IOException {
JsonToken jsonToken = in.peek();
switch (jsonToken) {
case NULL:
in.nextNull();
return null;
case NUMBER:
case STRING:
return new LazilyParsedNumber(in.nextString());
default:
throw new JsonSyntaxException("Expecting number, got: " + jsonToken);
}
}
@Override public JsonElement read(JsonReader in) throws IOException {
switch (in.peek()) {
case STRING:
return new JsonPrimitive(in.nextString());
case NUMBER:
String number = in.nextString();
return new JsonPrimitive(new LazilyParsedNumber(number));
case BOOLEAN:
return new JsonPrimitive(in.nextBoolean());
case NULL:
in.nextNull();
return JsonNull.INSTANCE;
case BEGIN_ARRAY:
JsonArray array = new JsonArray();
in.beginArray();
while (in.hasNext()) {
array.add(read(in));
}
in.endArray();
return array;
case BEGIN_OBJECT:
JsonObject object = new JsonObject();
in.beginObject();
while (in.hasNext()) {
object.add(in.nextName(), read(in));
}
in.endObject();
return object;
case END_DOCUMENT:
case NAME:
case END_OBJECT:
case END_ARRAY:
default:
throw new IllegalArgumentException();
}
}
private Object des(JsonElement val, JsonDeserializationContext context) {
if (val.isJsonArray())
return MultimapAdapter.arraydes(val.getAsJsonArray(), context);
else if (val.isJsonObject())
return context.deserialize(val, ASObject.class);
else if (val.isJsonPrimitive()) {
Object v = primConverter.convert(val.getAsJsonPrimitive());
if (v instanceof LazilyParsedNumber)
v = new LazilyParsedNumberComparable((LazilyParsedNumber) v);
return v;
}
else
return null;
}
@Override
public Object invoke(Class<?> returnType, Object instance, Object... parameters) {
if (returnType.equals(Integer.class)) {
return (Object)((LazilyParsedNumber)constant).intValue();
}
return constant;
}
@Override
public Number read(JsonReader in) throws IOException {
JsonToken jsonToken = in.peek();
switch (jsonToken) {
case NULL:
in.nextNull();
return null;
case NUMBER:
return new LazilyParsedNumber(in.nextString());
default:
throw new JsonSyntaxException("Expecting number, got: " + jsonToken);
}
}
@Override public JsonElement read(JsonReader in) throws IOException {
switch (in.peek()) {
case STRING:
return new JsonPrimitive(in.nextString());
case NUMBER:
String number = in.nextString();
return new JsonPrimitive(new LazilyParsedNumber(number));
case BOOLEAN:
return new JsonPrimitive(in.nextBoolean());
case NULL:
in.nextNull();
return JsonNull.INSTANCE;
case BEGIN_ARRAY:
JsonArray array = new JsonArray();
in.beginArray();
while (in.hasNext()) {
array.add(read(in));
}
in.endArray();
return array;
case BEGIN_OBJECT:
JsonObject object = new JsonObject();
in.beginObject();
while (in.hasNext()) {
object.add(in.nextName(), read(in));
}
in.endObject();
return object;
case END_DOCUMENT:
case NAME:
case END_OBJECT:
case END_ARRAY:
default:
throw new IllegalArgumentException();
}
}
public static Number resolveNumber(Number n) {
if (n instanceof LazilyParsedNumber) {
try {
return n.longValue();
} catch (NumberFormatException ex) {
return n.doubleValue();
}
} else {
// already resolved.
return n;
}
}
@Test
public void testGsonNumberConversions() {
AggregatedPayload payload = AggregatedPayload.create(payloadJson);
Number doubleNum = new LazilyParsedNumber("2.321");
assertEquals( Double.parseDouble( "2.321" ), PreaggregateConversions.resolveNumber( doubleNum ) );
Number longNum = new LazilyParsedNumber("12345");
assertEquals(Long.parseLong("12345"), PreaggregateConversions.resolveNumber(longNum));
}
public Number getAsNumber() {
return this.value instanceof String ? new LazilyParsedNumber((String) this.value) : (Number) this.value;
}
/**
* Method initGsonBuilder.
* @param builder Builder
* @return GsonBuilder */
private static GsonBuilder initGsonBuilder(
Builder builder,
Schema schema,
ASObjectAdapter base,
Iterable<AdapterEntry<?>> adapters) {
GsonBuilder gson = new GsonBuilder()
.registerTypeHierarchyAdapter(TypeValue.class, new TypeValueAdapter(schema))
.registerTypeHierarchyAdapter(LinkValue.class, new LinkValueAdapter(schema))
.registerTypeHierarchyAdapter(Iterable.class, ITERABLE)
.registerTypeHierarchyAdapter(ASObject.class, base)
.registerTypeHierarchyAdapter(Collection.class, base)
.registerTypeHierarchyAdapter(Activity.class, base)
.registerTypeHierarchyAdapter(NLV.class, NLV)
.registerTypeHierarchyAdapter(ActionsValue.class, ACTIONS)
.registerTypeHierarchyAdapter(Optional.class, OPTIONAL)
.registerTypeHierarchyAdapter(Range.class, RANGE)
.registerTypeHierarchyAdapter(Table.class, TABLE)
.registerTypeHierarchyAdapter(LazilyParsedNumber.class, NUMBER)
.registerTypeHierarchyAdapter(LazilyParsedNumberComparable.class, NUMBER)
.registerTypeHierarchyAdapter(ReadableDuration.class, DURATION)
.registerTypeHierarchyAdapter(ReadablePeriod.class, PERIOD)
.registerTypeHierarchyAdapter(ReadableInterval.class, INTERVAL)
.registerTypeAdapter(
Activity.Status.class,
forEnum(
Activity.Status.class,
Activity.Status.OTHER))
.registerTypeAdapter(Date.class, DATE)
.registerTypeAdapter(DateTime.class, DATETIME)
.registerTypeAdapter(MediaType.class, MIMETYPE)
.registerTypeHierarchyAdapter(Multimap.class, MULTIMAP);
for (AdapterEntry<?> entry : adapters) {
if (entry.hier)
gson.registerTypeHierarchyAdapter(
entry.type,
entry.adapter!=null ?
entry.adapter : base);
else
gson.registerTypeAdapter(
entry.type,
entry.adapter!=null ?
entry.adapter:base);
}
return gson;
}
@Override
public Value read(JsonReader in) throws IOException {
switch (in.peek()) {
case STRING:
return compileString(getContext(), in.nextString());
case NUMBER:
String number = in.nextString();
return new Primitive(new LazilyParsedNumber(number));
case BOOLEAN:
return new Primitive(in.nextBoolean());
case NULL:
in.nextNull();
return Null.INSTANCE;
case BEGIN_ARRAY:
Array array = new Array();
in.beginArray();
while (in.hasNext()) {
array.add(read(in));
}
in.endArray();
return array;
case BEGIN_OBJECT:
ObjectValue object = new ObjectValue();
in.beginObject();
if (in.hasNext()) {
String name = in.nextName();
if (ProteusConstants.TYPE.equals(name) && JsonToken.STRING.equals(in.peek())) {
String type = in.nextString();
if (PROTEUS_INSTANCE_HOLDER.isLayout(type)) {
Layout layout = LAYOUT_TYPE_ADAPTER.read(type, PROTEUS_INSTANCE_HOLDER.getProteus(), in);
in.endObject();
return layout;
} else {
object.add(name, compileString(getContext(), type));
}
} else {
object.add(name, read(in));
}
}
while (in.hasNext()) {
object.add(in.nextName(), read(in));
}
in.endObject();
return object;
case END_DOCUMENT:
case NAME:
case END_OBJECT:
case END_ARRAY:
default:
throw new IllegalArgumentException();
}
}
@Override
public Value read(JsonReader in) throws IOException {
switch (in.peek()) {
case STRING:
return compileString(getContext(), in.nextString());
case NUMBER:
String number = in.nextString();
return new Primitive(new LazilyParsedNumber(number));
case BOOLEAN:
return new Primitive(in.nextBoolean());
case NULL:
in.nextNull();
return Null.INSTANCE;
case BEGIN_ARRAY:
Array array = new Array();
in.beginArray();
while (in.hasNext()) {
array.add(read(in));
}
in.endArray();
return array;
case BEGIN_OBJECT:
ObjectValue object = new ObjectValue();
in.beginObject();
if (in.hasNext()) {
String name = in.nextName();
if (TYPE.equals(name) && JsonToken.NUMBER.equals(in.peek())) {
int type = Integer.parseInt(in.nextString());
CustomValueTypeAdapter<? extends Value> adapter = getCustomValueTypeAdapter(type);
in.nextName();
Value value = adapter.read(in);
in.endObject();
return value;
} else {
object.add(name, read(in));
}
}
while (in.hasNext()) {
object.add(in.nextName(), read(in));
}
in.endObject();
return object;
case END_DOCUMENT:
case NAME:
case END_OBJECT:
case END_ARRAY:
default:
throw new IllegalArgumentException();
}
}
@Test(expected = NumberFormatException.class)
public void testExpectedGsonConversionFailure() {
new LazilyParsedNumber("2.321").longValue();
}
/**
* convenience method to get this element as a Number.
*
* @return get this element as a Number.
* @throws NumberFormatException if the value contained is not a valid Number.
*/
@Override
public Number getAsNumber() {
return value instanceof String ? new LazilyParsedNumber((String) value) : (Number) value;
}
/**
* Constructor for LazilyParsedNumberComparable.
* @param inner LazilyParsedNumber
*/
public LazilyParsedNumberComparable(LazilyParsedNumber inner) {
this.inner = inner;
}
/**
* convenience method to get this element as a Number.
*
* @return get this element as a Number.
* @throws NumberFormatException if the value contained is not a valid Number.
*/
@Override
public Number getAsNumber() {
return value instanceof String ? new LazilyParsedNumber((String) value) : (Number) value;
}