下面列出了怎么用com.fasterxml.jackson.core.JsonParser.NumberType的API类实例代码及写法,或者点击链接到github查看源代码。
private void _verifyTreeSequence(ValueIterator<JrsValue> it) throws Exception
{
assertTrue(it.hasNext());
JrsValue tree = it.nextValue();
assertTrue(tree.isObject());
assertEquals(2, tree.size());
assertEquals(NumberType.INT, tree.path("id").numberType());
assertEquals("foo", tree.path("msg").asText());
assertTrue(it.hasNext());
tree = it.nextValue();
assertTrue(tree.isArray());
assertEquals(3, tree.size());
assertTrue(tree.get(0).isNumber());
assertTrue(tree.get(1).isNumber());
assertEquals(NumberType.INT, tree.get(2).numberType());
assertTrue(it.hasNext());
tree = it.nextValue();
assertTrue(tree.isNull());
assertFalse(it.hasNext());
}
/**
* Helper method that calls necessary visit method(s) to indicate that the
* underlying JSON type is JSON Integer number.
*
* @since 2.7
*/
protected void visitIntFormat(JsonFormatVisitorWrapper visitor, JavaType typeHint,
NumberType numberType)
throws JsonMappingException
{
JsonIntegerFormatVisitor v2 = visitor.expectIntegerFormat(typeHint);
if (_neitherNull(v2, numberType)) {
v2.numberType(numberType);
}
}
/**
* Helper method that calls necessary visit method(s) to indicate that the
* underlying JSON type is JSON Integer number, but that there is also a further
* format restriction involved.
*
* @since 2.7
*/
protected void visitIntFormat(JsonFormatVisitorWrapper visitor, JavaType typeHint,
NumberType numberType, JsonValueFormat format)
throws JsonMappingException
{
JsonIntegerFormatVisitor v2 = visitor.expectIntegerFormat(typeHint);
if (v2 != null) {
if (numberType != null) {
v2.numberType(numberType);
}
if (format != null) {
v2.format(format);
}
}
}
/**
* Helper method that calls necessary visit method(s) to indicate that the
* underlying JSON type is a floating-point JSON number.
*
* @since 2.7
*/
protected void visitFloatFormat(JsonFormatVisitorWrapper visitor, JavaType typeHint,
NumberType numberType)
throws JsonMappingException
{
JsonNumberFormatVisitor v2 = visitor.expectNumberFormat(typeHint);
if (v2 != null) {
v2.numberType(numberType);
}
}
protected final boolean _deserializeBooleanFromOther(JsonParser p, DeserializationContext ctxt)
throws IOException
{
if (p.getNumberType() == NumberType.LONG) {
return (p.getLongValue() == 0L) ? Boolean.FALSE : Boolean.TRUE;
}
// no really good logic; let's actually resort to textual comparison
String str = p.getText();
if ("0.0".equals(str) || "0".equals(str)) {
return Boolean.FALSE;
}
return Boolean.TRUE;
}
private cfData parseArray(JsonParser jp, cfArrayData array, boolean bStrictMapping ) throws JsonParseException, IOException, cfmRunTimeException{
JsonToken token = jp.nextToken();
while ( token != JsonToken.END_ARRAY ){
if ( token == JsonToken.START_ARRAY ){
array.addElement( parseArray(jp,cfArrayData.createArray(1),bStrictMapping ) );
}else if ( token == JsonToken.START_OBJECT ){
array.addElement( parseObject(jp,new cfStructData(),bStrictMapping) );
}else if ( token == JsonToken.VALUE_NUMBER_INT ){
if ( jp.getNumberType() == NumberType.INT )
array.addElement( new cfNumberData(jp.getIntValue()) );
else if ( jp.getNumberType() == NumberType.LONG || jp.getNumberType() == NumberType.BIG_INTEGER )
array.addElement( new cfNumberData(jp.getLongValue()) );
}else if ( token == JsonToken.VALUE_NUMBER_FLOAT ){
if ( jp.getNumberType() == NumberType.FLOAT )
array.addElement( new cfNumberData(jp.getFloatValue()) );
else if ( jp.getNumberType() == NumberType.DOUBLE )
array.addElement( new cfNumberData(jp.getDoubleValue()) );
} else if ( token == JsonToken.VALUE_FALSE ){
array.addElement( cfBooleanData.FALSE );
} else if ( token == JsonToken.VALUE_TRUE ){
array.addElement( cfBooleanData.TRUE );
} else if ( token == JsonToken.VALUE_NULL ){
array.addElement( cfNullData.NULL );
}else
array.addElement( getString(jp.getText()) );
token = jp.nextToken();
}
return array;
}
@Override
public void acceptJsonFormatVisitor(JsonFormatVisitorWrapper visitor, JavaType typeHint) throws JsonMappingException {
// 27-Mar-2017, tatu: As usual, bit tricky but... seems like we should call
// visitor for actual representation
visitIntFormat(visitor, typeHint, NumberType.INT);
}
protected final boolean _deserializeBoolean(JsonParser p, DeserializationContext ctxt) throws IOException
{
JsonToken t = p.currentToken();
if (t == JsonToken.VALUE_TRUE) return true;
if (t == JsonToken.VALUE_FALSE) return false;
if (t == JsonToken.VALUE_NULL) {
if (ctxt.isEnabled(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES)) {
_failNullToPrimitiveCoercion(ctxt, "boolean");
}
return false;
}
if (t == JsonToken.VALUE_NUMBER_INT) {
_verifyScalarCoercion(ctxt, p, "boolean");
// 11-Jan-2012, tatus: May be outside of int...
if (p.getNumberType() == NumberType.INT) {
return (p.getIntValue() != 0);
}
return _deserializeBooleanFromOther(p, ctxt);
}
// And finally, let's allow Strings to be converted too
if (t == JsonToken.VALUE_STRING) {
_verifyScalarCoercion(ctxt, p, "boolean");
String text = p.getText().trim();
if ("true".equals(text) || "True".equals(text)) {
return true;
}
if ("false".equals(text) || "False".equals(text) || text.length() == 0) {
return false;
}
if (_hasTextualNull(text)) {
return false;
}
throw ctxt.weirdStringException(text, Boolean.TYPE, "only \"true\" or \"false\" recognized");
}
// [databind#381]
if (t == JsonToken.START_ARRAY && ctxt.isEnabled(DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS)) {
p.nextToken();
final boolean parsed = _deserializeBooleanFromOther(p, ctxt);
t = p.nextToken();
if (t != JsonToken.END_ARRAY) {
_handleMissingEndArrayForSingle(p, ctxt);
}
return parsed;
}
// Otherwise, no can do:
return (Boolean) ctxt.handleUnexpectedToken(getType(), p);
}
private cfData parseObject(JsonParser jp, cfStructData struct, boolean bStrictMapping ) throws JsonParseException, IOException, cfmRunTimeException{
JsonToken token = jp.nextToken();
while ( token != JsonToken.END_OBJECT ){
String namefield = jp.getCurrentName();
if ( token == JsonToken.START_ARRAY ){
struct.setData( namefield, parseArray(jp, cfArrayData.createArray(1), bStrictMapping) );
}else if ( token == JsonToken.START_OBJECT ){
struct.setData( namefield, parseObject(jp,new cfStructData(), bStrictMapping) );
}else if ( token == JsonToken.VALUE_NUMBER_INT ){
if ( jp.getNumberType() == NumberType.INT )
struct.setData( namefield, new cfNumberData(jp.getIntValue()) );
else if ( jp.getNumberType() == NumberType.LONG || jp.getNumberType() == NumberType.BIG_INTEGER )
struct.setData( namefield, new cfNumberData(jp.getLongValue()) );
}else if ( token == JsonToken.VALUE_NUMBER_FLOAT ){
if ( jp.getNumberType() == NumberType.FLOAT )
struct.setData( namefield, new cfNumberData(jp.getFloatValue()) );
else if ( jp.getNumberType() == NumberType.DOUBLE )
struct.setData( namefield, new cfNumberData(jp.getDoubleValue()) );
} else if ( token == JsonToken.VALUE_FALSE ){
struct.setData( namefield, cfBooleanData.FALSE );
} else if ( token == JsonToken.VALUE_TRUE ){
struct.setData( namefield, cfBooleanData.TRUE );
} else if ( token == JsonToken.VALUE_NULL ){
struct.setData( namefield, cfNullData.NULL );
}else{
struct.setData( namefield, getString(jp.getText()) );
}
token = jp.nextToken();
}
if ( bStrictMapping )
return convertToQuery( struct );
else
return struct;
}
@Override
public NumberType numberType() {
return null;
}