JSONWriter.java

package com.alibaba.fastjson;

import com.alibaba.fastjson.serializer.SerializerFeature;

import java.io.IOException;
import java.io.Writer;

public class JSONWriter {
    private final Writer out;
    final com.alibaba.fastjson2.JSONWriter raw;

    public JSONWriter(Writer out) {
        this.out = out;
        raw = com.alibaba.fastjson2.JSONWriter.ofUTF8();
    }

    public void config(SerializerFeature feature, boolean state) {
        com.alibaba.fastjson2.JSONWriter.Context ctx = raw.getContext();
        switch (feature) {
            case UseISO8601DateFormat:
                if (state) {
                    ctx.setDateFormat("iso8601");
                }
                break;
            case WriteMapNullValue:
                ctx.config(com.alibaba.fastjson2.JSONWriter.Feature.WriteNulls, state);
                break;
            case WriteNullListAsEmpty:
                ctx.config(com.alibaba.fastjson2.JSONWriter.Feature.WriteNullListAsEmpty, state);
                break;
            case WriteNullStringAsEmpty:
                ctx.config(com.alibaba.fastjson2.JSONWriter.Feature.WriteNullStringAsEmpty, state);
                break;
            case WriteNullNumberAsZero:
                ctx.config(com.alibaba.fastjson2.JSONWriter.Feature.WriteNullNumberAsZero, state);
                break;
            case WriteNullBooleanAsFalse:
                ctx.config(com.alibaba.fastjson2.JSONWriter.Feature.WriteNullBooleanAsFalse, state);
                break;
            case BrowserCompatible:
                ctx.config(com.alibaba.fastjson2.JSONWriter.Feature.BrowserCompatible, state);
                break;
            case WriteClassName:
                ctx.config(com.alibaba.fastjson2.JSONWriter.Feature.WriteClassName, state);
                break;
            case WriteNonStringValueAsString:
                ctx.config(com.alibaba.fastjson2.JSONWriter.Feature.WriteNonStringValueAsString, state);
                break;
            case WriteEnumUsingToString:
                ctx.config(com.alibaba.fastjson2.JSONWriter.Feature.WriteEnumUsingToString, state);
                break;
            case NotWriteRootClassName:
                ctx.config(com.alibaba.fastjson2.JSONWriter.Feature.NotWriteRootClassName, state);
                break;
            case IgnoreErrorGetter:
                ctx.config(com.alibaba.fastjson2.JSONWriter.Feature.IgnoreErrorGetter, state);
                break;
            case WriteDateUseDateFormat:
                if (state) {
                    ctx.setDateFormat(JSON.DEFFAULT_DATE_FORMAT);
                }
                break;
            case BeanToArray:
                if (state) {
                    ctx.config(com.alibaba.fastjson2.JSONWriter.Feature.BeanToArray);
                }
                break;
            default:
                break;
        }
    }

    public void writeObject(Object object) {
        raw.writeAny(object);
    }

    public void flush() throws IOException {
        raw.flushTo(out);
        out.flush();
    }

    public void close() {
        raw.close();
        try {
            out.close();
        } catch (IOException ignored) {
            //
        }
    }
}