下面列出了怎么用com.fasterxml.jackson.core.json.JsonWriteContext的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* @since 2.7
*/
public TokenBuffer(JsonParser p, DeserializationContext ctxt)
{
_objectCodec = p.getCodec();
_parentContext = p.getParsingContext();
_generatorFeatures = DEFAULT_GENERATOR_FEATURES;
_writeContext = JsonWriteContext.createRootContext(null);
// at first we have just one segment
_first = _last = new Segment();
_appendAt = 0;
_hasNativeTypeIds = p.canReadTypeId();
_hasNativeObjectIds = p.canReadObjectId();
_mayHaveNativeIds = _hasNativeTypeIds | _hasNativeObjectIds;
_forceBigDecimal = (ctxt == null) ? false
: ctxt.isEnabled(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);
}
/**
* @param codec Object codec to use for stream-based object
* conversion through parser/generator interfaces. If null,
* such methods cannot be used.
* @param hasNativeIds Whether resulting {@link JsonParser} (if created)
* is considered to support native type and object ids
*/
public TokenBuffer(ObjectCodec codec, boolean hasNativeIds)
{
_objectCodec = codec;
_generatorFeatures = DEFAULT_GENERATOR_FEATURES;
_writeContext = JsonWriteContext.createRootContext(null);
// at first we have just one segment
_first = _last = new Segment();
_appendAt = 0;
_hasNativeTypeIds = hasNativeIds;
_hasNativeObjectIds = hasNativeIds;
_mayHaveNativeIds = _hasNativeTypeIds | _hasNativeObjectIds;
}
@Override
public final void writeEndArray() throws IOException
{
_append(JsonToken.END_ARRAY);
// Let's allow unbalanced tho... i.e. not run out of root level, ever
JsonWriteContext c = _writeContext.getParent();
if (c != null) {
_writeContext = c;
}
}
@Override // since 2.8
public void writeStartObject(Object forValue) throws IOException
{
_writeContext.writeValue();
_append(JsonToken.START_OBJECT);
JsonWriteContext ctxt = _writeContext.createChildObjectContext();
_writeContext = ctxt;
if (forValue != null) {
ctxt.setCurrentValue(forValue);
}
}
@Override
public final void writeEndObject() throws IOException
{
_append(JsonToken.END_OBJECT);
// Let's allow unbalanced tho... i.e. not run out of root level, ever
JsonWriteContext c = _writeContext.getParent();
if (c != null) {
_writeContext = c;
}
}
protected GeneratorBase(int features, ObjectCodec codec) {
super();
_features = features;
_objectCodec = codec;
DupDetector dups = Feature.STRICT_DUPLICATE_DETECTION.enabledIn(features)
? DupDetector.rootDetector(this) : null;
_writeContext = JsonWriteContext.createRootContext(dups);
_cfgNumbersAsStrings = Feature.WRITE_NUMBERS_AS_STRINGS.enabledIn(features);
}
/**
* @since 2.5
*/
protected GeneratorBase(int features, ObjectCodec codec, JsonWriteContext ctxt) {
super();
_features = features;
_objectCodec = codec;
_writeContext = ctxt;
_cfgNumbersAsStrings = Feature.WRITE_NUMBERS_AS_STRINGS.enabledIn(features);
}
@Override
public void serialize(String str, JsonGenerator gen,
SerializerProvider provider) throws IOException {
int status = ((JsonWriteContext) gen.getOutputContext()).writeValue();
switch (status) {
case JsonWriteContext.STATUS_OK_AFTER_COLON:
gen.writeRaw(':');
break;
case JsonWriteContext.STATUS_OK_AFTER_COMMA:
gen.writeRaw(',');
break;
case JsonWriteContext.STATUS_EXPECT_NAME:
throw new IOException("Can not write string value here");
}
gen.writeRaw('"');//写入JSON中字符串的开头引号
for (char c : str.toCharArray()) {
if (c >= 0x80) {
writeUnicodeEscape(gen, c); // 为所有非ASCII字符生成转义的unicode字符
} else {
// 为ASCII字符中前128个字符使用转义的unicode字符
int code = (c < ESCAPE_CODES.length ? ESCAPE_CODES[c] : 0);
if (code == 0) {
gen.writeRaw(c); // 此处不用转义
} else if (code < 0) {
writeUnicodeEscape(gen, (char) (-code - 1)); // 通用转义字符
} else {
writeShortEscape(gen, (char) code); // 短转义字符 (\n \t ...)
}
}
}
gen.writeRaw('"');//写入JSON中字符串的结束引号
}
protected GeneratorBase(int features, ObjectCodec codec) {
super();
_features = features;
_objectCodec = codec;
DupDetector dups = Feature.STRICT_DUPLICATE_DETECTION.enabledIn(features)
? DupDetector.rootDetector(this) : null;
_writeContext = JsonWriteContext.createRootContext(dups);
_cfgNumbersAsStrings = Feature.WRITE_NUMBERS_AS_STRINGS.enabledIn(features);
}
/**
* @since 2.5
*/
protected GeneratorBase(int features, ObjectCodec codec, JsonWriteContext ctxt) {
super();
_features = features;
_objectCodec = codec;
_writeContext = ctxt;
_cfgNumbersAsStrings = Feature.WRITE_NUMBERS_AS_STRINGS.enabledIn(features);
}
@Override
protected void _verifyValueWrite(String typeMsg) throws IOException, JsonGenerationException {
int status = _writeContext.writeValue();
if (status == JsonWriteContext.STATUS_EXPECT_NAME) {
_reportError("Can not "+typeMsg+", expecting field name");
}
}
@Override
public final JsonWriteContext getOutputContext() { return _writeContext; }
/**
* Note: co-variant return type.
*/
@Override public final JsonWriteContext getOutputContext() { return _writeContext; }