docs: private Writer doWrite(Writer writer, int indentFactor, int indent) throws IOException {
  		writer.write(CharUtil.DELIM_START);
  		boolean isFirst = true;
  		final boolean isIgnoreNullValue = this.config.isIgnoreNullValue();
  		final int newIndent = indent + indentFactor;
  		for (Entry<String, Object> entry : this.entrySet()) {
  			if (ObjectUtil.isNull(entry.getKey()) || (ObjectUtil.isNull(entry.getValue()) && isIgnoreNullValue)) {
  				continue;
  			}
  
  			if (isFirst) {
  				isFirst = false;
  			} else {
  				// 键值对分隔
  				writer.write(CharUtil.COMMA);
  			}
  			// 换行缩进
  			if (indentFactor > 0) {
  				writer.write(CharUtil.LF);
  			}
  
  			InternalJSONUtil.indent(writer, newIndent);
  			writer.write(JSONUtil.quote(entry.getKey().toString()));
  			writer.write(CharUtil.COLON);
  			if (indentFactor > 0) {
  				// 冒号后的空格
  				writer.write(CharUtil.SPACE);
  			}
  			InternalJSONUtil.writeValue(writer, entry.getValue(), indentFactor, newIndent, this.config);
  		}
  
  		// 结尾符
  		if (indentFactor > 0) {
  			writer.write(CharUtil.LF);
  		}
  		InternalJSONUtil.indent(writer, indent);
  		writer.write(CharUtil.DELIM_END);
  		return writer;
  	}