class JsonType extends DataType<String> implements Streamer<String> {

    public static final int ID = 26;
    public static final JsonType INSTANCE = new JsonType();

    @Override
    public int compare(String o1, String o2) {
        return o1.compareTo(o2);
    }

    @Override
    public int id() {
        return ID;
    }

    @Override
    public Precedence precedence() {
        return Precedence.UNCHECKED_OBJECT;
    }

    @Override
    public String getName() {
        return "json";
    }

    @Override
    public Streamer<String> streamer() {
        return this;
    }

    @Override
    public String sanitizeValue(Object value) {
        return (String) value;
    }

    @Override
    public String readValueFrom(StreamInput in) throws IOException {
        return in.readOptionalString();
    }

    @Override
    public void writeValueTo(StreamOutput out, String v) throws IOException {
        out.writeOptionalString(v);
    }

    @Override
    public String implicitCast(Object value) throws IllegalArgumentException, ClassCastException {
        return (String) value;
    }

    @Override
    @SuppressWarnings("unchecked")
    public String explicitCast(Object value, SessionSettings sessionSettings) throws IllegalArgumentException, ClassCastException {<FILL_FUNCTION_BODY>}

    @Override
    public long valueBytes(String value) {
        return RamUsageEstimator.sizeOf(value);
    }
}

        if (value instanceof Map<?, ?> map) {
            try {
                return Strings.toString(JsonXContent.builder().map((Map<String, ?>) map));
            } catch (IOException e) {
                throw new UncheckedIOException(e);
            }
        }
        return (String) value;
    
<methods>public non-sealed void <init>() ,public void addMappingOptions(Map<java.lang.String,java.lang.Object>) ,public java.lang.Integer characterMaximumLength() ,public ColumnStatsSupport<java.lang.String> columnStatsSupport() ,public int compareTo(DataType<?>) ,public boolean equals(java.lang.Object) ,public java.lang.String explicitCast(java.lang.Object, io.crate.metadata.settings.SessionSettings) throws java.lang.IllegalArgumentException, java.lang.ClassCastException,public abstract java.lang.String getName() ,public List<DataType<?>> getTypeParameters() ,public io.crate.types.TypeSignature getTypeSignature() ,public int hashCode() ,public abstract int id() ,public java.lang.String implicitCast(java.lang.Object) throws java.lang.IllegalArgumentException, java.lang.ClassCastException,public boolean isConvertableTo(DataType<?>, boolean) ,public java.lang.Integer numericPrecision() ,public abstract io.crate.types.DataType.Precedence precedence() ,public boolean precedes(DataType<?>) ,public long ramBytesUsed() ,public abstract java.lang.String sanitizeValue(java.lang.Object) ,public StorageSupport<? super java.lang.String> storageSupport() ,public final StorageSupport<? super java.lang.String> storageSupportSafe() ,public abstract Streamer<java.lang.String> streamer() ,public ColumnType<io.crate.sql.tree.Expression> toColumnType(io.crate.sql.tree.ColumnPolicy, Supplier<List<ColumnDefinition<io.crate.sql.tree.Expression>>>) ,public java.lang.String toString() ,public abstract long valueBytes(java.lang.String) ,public java.lang.String valueForInsert(java.lang.String) ,public final ValueIndexer<? super java.lang.String> valueIndexer(io.crate.metadata.RelationName, io.crate.metadata.Reference, Function<java.lang.String,FieldType>, Function<io.crate.metadata.ColumnIdent,io.crate.metadata.Reference>) ,public void writeTo(org.elasticsearch.common.io.stream.StreamOutput) throws java.io.IOException<variables>