SerializeWriter成员函数
序列化字段名称
public void writeFieldName(String key, boolean checkSpecial) {
if (key == null) {
/** 如果字段key为null, 输出 "null:" */
write("null:");
return;
}
if (useSingleQuotes) {
if (quoteFieldNames) {
/** 使用单引号并且在字段后面加':'输出 标准的json key*/
writeStringWithSingleQuote(key);
write(':');
} else {
/** 输出key,如果有特殊字符会自动添加单引号 */
writeKeyWithSingleQuoteIfHasSpecial(key);
}
} else {
if (quoteFieldNames) {
/** 使用双引号输出json key 并添加 : */
writeStringWithDoubleQuote(key, ':');
} else {
boolean hashSpecial = key.length() == 0;
for (int i = 0; i < key.length(); ++i) {
char ch = key.charAt(i);
boolean special = (ch < 64 && (sepcialBits & (1L << ch)) != 0) || ch == '\\';
if (special) {
hashSpecial = true;
break;
}
}
if (hashSpecial) {
/** 如果包含特殊字符,会进行特殊字符转换输出,eg: 使用转换后的native编码输出 */
writeStringWithDoubleQuote(key, ':');
} else {
/** 输出字段不加引号 */
write(key);
write(':');
}
}
}
}
序列化字段名称方法writeFieldName主要的任务:
- 完成字段特殊字符的转译
- 添加字段的引号
处理输出key的特殊字符方法writeStringWithDoubleQuote
前面已经分析过了,序列化字段名称是否需要添加引号和特殊字符处理参考writeKeyWithSingleQuoteIfHasSpecial
: