Example usage for com.fasterxml.jackson.core JsonGenerator writeString

List of usage examples for com.fasterxml.jackson.core JsonGenerator writeString

Introduction

In this page you can find the example usage for com.fasterxml.jackson.core JsonGenerator writeString.

Prototype

public abstract void writeString(SerializableString text) throws IOException, JsonGenerationException;

Source Link

Document

Method similar to #writeString(String) , but that takes SerializableString which can make this potentially more efficient to call as generator may be able to reuse quoted and/or encoded representation.

Usage

From source file:msearch.io.MSFilmlisteSchreiben.java

public void filmlisteSchreibenJson(String datei, ListeFilme listeFilme) {
    MSLog.systemMeldung("Filme Schreiben (" + listeFilme.size() + " Filme) :");
    File file = new File(datei);
    File dir = new File(file.getParent());
    if (!dir.exists()) {
        if (!dir.mkdirs()) {
            MSLog.fehlerMeldung(915236478, MSLog.FEHLER_ART_PROG,
                    "MSearchIoXmlFilmlisteSchreiben.xmlSchreibenStart",
                    "Kann den Pfad nicht anlegen: " + dir.toString());
        }//  w w  w. j  av  a 2  s. com
    }
    MSLog.systemMeldung("   --> Start Schreiben nach: " + datei);
    try {
        String sender = "", thema = "";
        JsonFactory jsonF = new JsonFactory();
        JsonGenerator jg;
        if (datei.endsWith(MSConst.FORMAT_XZ)) {
            LZMA2Options options = new LZMA2Options();
            XZOutputStream out = new XZOutputStream(new FileOutputStream(file), options);
            jg = jsonF.createGenerator(out);
        } else if (datei.endsWith(MSConst.FORMAT_BZ2)) {
            bZip2CompressorOutputStream = new BZip2CompressorOutputStream(new FileOutputStream(file),
                    9 /*Blocksize: 1 - 9*/);
            jg = jsonF.createGenerator(bZip2CompressorOutputStream, JsonEncoding.UTF8);
        } else if (datei.endsWith(MSConst.FORMAT_ZIP)) {
            zipOutputStream = new ZipOutputStream(new FileOutputStream(file));
            ZipEntry entry = new ZipEntry(MSConst.XML_DATEI_FILME);
            zipOutputStream.putNextEntry(entry);
            jg = jsonF.createGenerator(zipOutputStream, JsonEncoding.UTF8);
        } else {
            jg = jsonF.createGenerator(new File(datei), JsonEncoding.UTF8);
        }
        jg.useDefaultPrettyPrinter(); // enable indentation just to make debug/testing easier
        jg.writeStartObject();
        // Infos zur Filmliste
        jg.writeArrayFieldStart(ListeFilme.FILMLISTE);
        for (int i = 0; i < ListeFilme.MAX_ELEM; ++i) {
            jg.writeString(listeFilme.metaDaten[i]);
        }
        jg.writeEndArray();
        // Infos der Felder in der Filmliste
        jg.writeArrayFieldStart(ListeFilme.FILMLISTE);
        for (int i = 0; i < DatenFilm.COLUMN_NAMES_JSON.length; ++i) {
            jg.writeString(DatenFilm.COLUMN_NAMES[DatenFilm.COLUMN_NAMES_JSON[i]]);
        }
        jg.writeEndArray();
        //Filme schreiben
        ListIterator<DatenFilm> iterator;
        DatenFilm datenFilm;
        iterator = listeFilme.listIterator();
        while (iterator.hasNext()) {
            datenFilm = iterator.next();
            jg.writeArrayFieldStart(DatenFilm.FILME_);
            for (int i = 0; i < DatenFilm.COLUMN_NAMES_JSON.length; ++i) {
                int m = DatenFilm.COLUMN_NAMES_JSON[i];
                if (m == DatenFilm.FILM_SENDER_NR) {
                    if (datenFilm.arr[m].equals(sender)) {
                        jg.writeString("");
                    } else {
                        sender = datenFilm.arr[m];
                        jg.writeString(datenFilm.arr[m]);
                    }
                } else if (m == DatenFilm.FILM_THEMA_NR) {
                    if (datenFilm.arr[m].equals(thema)) {
                        jg.writeString("");
                    } else {
                        thema = datenFilm.arr[m];
                        jg.writeString(datenFilm.arr[m]);
                    }
                } else {
                    jg.writeString(datenFilm.arr[m]);
                }
            }
            jg.writeEndArray();
        }
        jg.writeEndObject();
        jg.close();
        MSLog.systemMeldung("   --> geschrieben!");
    } catch (Exception ex) {
        MSLog.fehlerMeldung(846930145, MSLog.FEHLER_ART_PROG, "IoXmlSchreiben.FilmeSchreiben", ex,
                "nach: " + datei);
    }
}

From source file:com.spotify.docker.client.DefaultDockerClient.java

@Override
public List<Image> listImages(ListImagesParam... params) throws DockerException, InterruptedException {
    WebTarget resource = resource().path("images").path("json");

    final Map<String, String> filters = newHashMap();
    for (ListImagesParam param : params) {
        if (param instanceof ListImagesFilterParam) {
            filters.put(param.name(), param.value());
        } else {/*from   w ww .j a v  a 2  s .  co  m*/
            resource = resource.queryParam(param.name(), param.value());
        }
    }

    // If filters were specified, we must put them in a JSON object and pass them using the
    // 'filters' query param like this: filters={"dangling":["true"]}
    try {
        if (!filters.isEmpty()) {
            final StringWriter writer = new StringWriter();
            final JsonGenerator generator = objectMapper().getFactory().createGenerator(writer);
            generator.writeStartObject();
            for (Map.Entry<String, String> entry : filters.entrySet()) {
                generator.writeArrayFieldStart(entry.getKey());
                generator.writeString(entry.getValue());
                generator.writeEndArray();
            }
            generator.writeEndObject();
            generator.close();
            // We must URL encode the string, otherwise Jersey chokes on the double-quotes in the json.
            final String encoded = URLEncoder.encode(writer.toString(), UTF_8.name());
            resource = resource.queryParam("filters", encoded);
        }
    } catch (IOException e) {
        throw new DockerException(e);
    }

    return request(GET, IMAGE_LIST, resource, resource.request(APPLICATION_JSON_TYPE));
}

From source file:org.apache.nifi.processors.elasticsearch.PutElasticsearchHttpRecord.java

@SuppressWarnings("unchecked")
private void writeValue(final JsonGenerator generator, final Object value, final String fieldName,
        final DataType dataType) throws IOException {
    if (value == null) {
        generator.writeNull();//w w w .  j  a v  a2  s.c o  m
        return;
    }

    final DataType chosenDataType = dataType.getFieldType() == RecordFieldType.CHOICE
            ? DataTypeUtils.chooseDataType(value, (ChoiceDataType) dataType)
            : dataType;
    final Object coercedValue = DataTypeUtils.convertType(value, chosenDataType, fieldName);
    if (coercedValue == null) {
        generator.writeNull();
        return;
    }

    switch (chosenDataType.getFieldType()) {
    case DATE: {
        final String stringValue = DataTypeUtils.toString(coercedValue,
                () -> DataTypeUtils.getDateFormat(RecordFieldType.DATE.getDefaultFormat()));
        if (DataTypeUtils.isLongTypeCompatible(stringValue)) {
            generator.writeNumber(DataTypeUtils.toLong(coercedValue, fieldName));
        } else {
            generator.writeString(stringValue);
        }
        break;
    }
    case TIME: {
        final String stringValue = DataTypeUtils.toString(coercedValue,
                () -> DataTypeUtils.getDateFormat(RecordFieldType.TIME.getDefaultFormat()));
        if (DataTypeUtils.isLongTypeCompatible(stringValue)) {
            generator.writeNumber(DataTypeUtils.toLong(coercedValue, fieldName));
        } else {
            generator.writeString(stringValue);
        }
        break;
    }
    case TIMESTAMP: {
        final String stringValue = DataTypeUtils.toString(coercedValue,
                () -> DataTypeUtils.getDateFormat(RecordFieldType.TIMESTAMP.getDefaultFormat()));
        if (DataTypeUtils.isLongTypeCompatible(stringValue)) {
            generator.writeNumber(DataTypeUtils.toLong(coercedValue, fieldName));
        } else {
            generator.writeString(stringValue);
        }
        break;
    }
    case DOUBLE:
        generator.writeNumber(DataTypeUtils.toDouble(coercedValue, fieldName));
        break;
    case FLOAT:
        generator.writeNumber(DataTypeUtils.toFloat(coercedValue, fieldName));
        break;
    case LONG:
        generator.writeNumber(DataTypeUtils.toLong(coercedValue, fieldName));
        break;
    case INT:
    case BYTE:
    case SHORT:
        generator.writeNumber(DataTypeUtils.toInteger(coercedValue, fieldName));
        break;
    case CHAR:
    case STRING:
        generator.writeString(coercedValue.toString());
        break;
    case BIGINT:
        if (coercedValue instanceof Long) {
            generator.writeNumber((Long) coercedValue);
        } else {
            generator.writeNumber((BigInteger) coercedValue);
        }
        break;
    case BOOLEAN:
        final String stringValue = coercedValue.toString();
        if ("true".equalsIgnoreCase(stringValue)) {
            generator.writeBoolean(true);
        } else if ("false".equalsIgnoreCase(stringValue)) {
            generator.writeBoolean(false);
        } else {
            generator.writeString(stringValue);
        }
        break;
    case RECORD: {
        final Record record = (Record) coercedValue;
        final RecordDataType recordDataType = (RecordDataType) chosenDataType;
        final RecordSchema childSchema = recordDataType.getChildSchema();
        writeRecord(record, childSchema, generator);
        break;
    }
    case MAP: {
        final MapDataType mapDataType = (MapDataType) chosenDataType;
        final DataType valueDataType = mapDataType.getValueType();
        final Map<String, ?> map = (Map<String, ?>) coercedValue;
        generator.writeStartObject();
        for (final Map.Entry<String, ?> entry : map.entrySet()) {
            final String mapKey = entry.getKey();
            final Object mapValue = entry.getValue();
            generator.writeFieldName(mapKey);
            writeValue(generator, mapValue, fieldName + "." + mapKey, valueDataType);
        }
        generator.writeEndObject();
        break;
    }
    case ARRAY:
    default:
        if (coercedValue instanceof Object[]) {
            final Object[] values = (Object[]) coercedValue;
            final ArrayDataType arrayDataType = (ArrayDataType) dataType;
            final DataType elementType = arrayDataType.getElementType();
            writeArray(values, fieldName, generator, elementType);
        } else {
            generator.writeString(coercedValue.toString());
        }
        break;
    }
}

From source file:com.spotify.docker.client.DefaultDockerClient.java

@Override
public String execCreate(String containerId, String[] cmd, ExecParameter... params)
        throws DockerException, InterruptedException {
    WebTarget resource = resource().path("containers").path(containerId).path("exec");

    final StringWriter writer = new StringWriter();
    try {//from w  w  w.  ja v  a  2 s.  co m
        final JsonGenerator generator = objectMapper().getFactory().createGenerator(writer);
        generator.writeStartObject();

        for (ExecParameter param : params) {
            generator.writeBooleanField(param.getName(), true);
        }

        generator.writeArrayFieldStart("Cmd");
        for (String s : cmd) {
            generator.writeString(s);
        }
        generator.writeEndArray();

        generator.writeEndObject();
        generator.close();
    } catch (IOException e) {
        throw new DockerException(e);
    }

    String response;
    try {
        response = request(POST, String.class, resource, resource.request(APPLICATION_JSON_TYPE),
                Entity.json(writer.toString()));
    } catch (DockerRequestException e) {
        switch (e.status()) {
        case 404:
            throw new ContainerNotFoundException(containerId);
        default:
            throw e;
        }
    }

    try {
        JsonNode json = objectMapper().readTree(response);
        return json.findValue("Id").textValue();
    } catch (IOException e) {
        throw new DockerException(e);
    }
}

From source file:net.opentsdb.tsd.HttpSampleSerializer.java

/**
 * Format the results from a timeseries data query
 * @param data_query The TSQuery object used to fetch the results
 * @param results The data fetched from storage
 * @param globals An optional list of global annotation objects
 * @return A ChannelBuffer object to pass on to the caller
 *//*from w ww. j ava  2  s  .co  m*/
public ChannelBuffer formatQueryV1(final TSQuery data_query, final List<DataPoints[]> results,
        final List<Annotation> globals) {

    final boolean as_arrays = this.query.hasQueryStringParam("arrays");
    final String jsonp = this.query.getQueryStringParam("jsonp");

    // todo - this should be streamed at some point since it could be HUGE
    final ChannelBuffer response = ChannelBuffers.dynamicBuffer();
    final OutputStream output = new ChannelBufferOutputStream(response);
    try {
        // don't forget jsonp
        if (jsonp != null && !jsonp.isEmpty()) {
            output.write((jsonp + "(").getBytes(query.getCharset()));
        }
        JsonGenerator json = JSON.getFactory().createGenerator(output);
        json.writeStartArray();

        for (DataPoints[] separate_dps : results) {
            for (DataPoints dps : separate_dps) {
                json.writeStartObject();

                json.writeStringField("metric", dps.metricName());

                json.writeFieldName("tags");
                json.writeStartObject();
                if (dps.getTags() != null) {
                    for (Map.Entry<String, String> tag : dps.getTags().entrySet()) {
                        json.writeStringField(tag.getKey(), tag.getValue());
                    }
                }
                json.writeEndObject();

                json.writeFieldName("aggregateTags");
                json.writeStartArray();
                if (dps.getAggregatedTags() != null) {
                    for (String atag : dps.getAggregatedTags()) {
                        json.writeString(atag);
                    }
                }
                json.writeEndArray();

                if (data_query.getShowTSUIDs()) {
                    json.writeFieldName("tsuids");
                    json.writeStartArray();
                    final List<String> tsuids = dps.getTSUIDs();
                    Collections.sort(tsuids);
                    for (String tsuid : tsuids) {
                        json.writeString(tsuid);
                    }
                    json.writeEndArray();
                }

                if (!data_query.getNoAnnotations()) {
                    final List<Annotation> annotations = dps.getAnnotations();
                    if (annotations != null) {
                        Collections.sort(annotations);
                        json.writeArrayFieldStart("annotations");
                        for (Annotation note : annotations) {
                            json.writeObject(note);
                        }
                        json.writeEndArray();
                    }

                    if (globals != null && !globals.isEmpty()) {
                        Collections.sort(globals);
                        json.writeArrayFieldStart("globalAnnotations");
                        for (Annotation note : globals) {
                            json.writeObject(note);
                        }
                        json.writeEndArray();
                    }
                }

                // now the fun stuff, dump the data
                json.writeFieldName("dps");

                // default is to write a map, otherwise write arrays
                if (as_arrays) {
                    json.writeStartArray();
                    for (final DataPoint dp : dps) {
                        if (dp.timestamp() < data_query.startTime() || dp.timestamp() > data_query.endTime()) {
                            continue;
                        }
                        final long timestamp = data_query.getMsResolution() ? dp.timestamp()
                                : dp.timestamp() / 1000;
                        json.writeStartArray();
                        json.writeNumber(timestamp);
                        json.writeNumber(dp.isInteger() ? dp.longValue() : dp.doubleValue());
                        json.writeEndArray();
                    }
                    json.writeEndArray();
                } else {
                    json.writeStartObject();
                    for (final DataPoint dp : dps) {
                        if (dp.timestamp() < (data_query.startTime())
                                || dp.timestamp() > (data_query.endTime())) {
                            continue;
                        }
                        final long timestamp = data_query.getMsResolution() ? dp.timestamp()
                                : dp.timestamp() / 1000;
                        json.writeNumberField(Long.toString(timestamp),
                                dp.isInteger() ? dp.longValue() : dp.doubleValue());
                    }
                    json.writeEndObject();
                }

                // close the results for this particular query
                json.writeEndObject();
            }
        }

        // close
        json.writeEndArray();
        json.close();

        if (jsonp != null && !jsonp.isEmpty()) {
            output.write(")".getBytes());
        }
        return response;
    } catch (IOException e) {
        LOG.error("Unexpected exception", e);
        throw new RuntimeException(e);
    }
}

From source file:com.attribyte.essem.model.StoredGraph.java

/**
 * Generates JSON for this key.//from  ww w  .  ja  va2s .  co m
 * @param generator The generator.
 * @throws java.io.IOException on generation error.
 */
public void generateJSON(final JsonGenerator generator) throws IOException {
    generator.writeStartObject();
    generator.writeStringField("id", id);
    generator.writeStringField("uid", uid);
    generator.writeStringField("index", index);
    generator.writeStringField("application", key.application);
    generator.writeStringField("host", key.host);
    generator.writeStringField("instance", key.instance);
    generator.writeStringField("name", key.name);
    generator.writeStringField("field", key.field);
    generator.writeStringField("range", range);
    generator.writeNumberField("startTimestamp", startTimestamp);
    generator.writeNumberField("endTimestamp", endTimestamp);
    generator.writeStringField("downsampleFn", downsampleFn);
    if (rateUnit != null)
        generator.writeStringField("rateUnit", rateUnit);
    generator.writeStringField("title", title);
    generator.writeStringField("description", description);
    generator.writeStringField("xLabel", xLabel);
    generator.writeStringField("yLabel", yLabel);

    generator.writeArrayFieldStart("tag");
    for (String tag : tags) {
        generator.writeString(tag);
    }
    generator.writeEndArray();

    generator.writeStringField("created", DateTime.standardFormat(this.createTime));
    generator.writeEndObject();
}

From source file:com.google.openrtb.json.OpenRtbJsonWriter.java

protected void writeBidFields(Bid bid, JsonGenerator gen) throws IOException {
    gen.writeStringField("id", bid.getId());
    gen.writeStringField("impid", bid.getImpid());
    gen.writeNumberField("price", bid.getPrice());
    if (bid.hasAdid()) {
        gen.writeStringField("adid", bid.getAdid());
    }/*w  w w  . jav  a2  s .c om*/
    if (bid.hasNurl()) {
        gen.writeStringField("nurl", bid.getNurl());
    }
    switch (bid.getAdmOneofCase()) {
    case ADM:
        gen.writeStringField("adm", bid.getAdm());
        break;
    case ADM_NATIVE:
        gen.writeFieldName("adm");
        if (factory().isForceNativeAsObject()) {
            nativeWriter().writeNativeResponse(bid.getAdmNative(), gen);
        } else {
            gen.writeString(nativeWriter().writeNativeResponse(bid.getAdmNative()));
        }
        break;
    case ADMONEOF_NOT_SET:
        checkRequired(false);
    }
    writeStrings("adomain", bid.getAdomainList(), gen);
    if (bid.hasBundle()) {
        gen.writeStringField("bundle", bid.getBundle());
    }
    if (bid.hasIurl()) {
        gen.writeStringField("iurl", bid.getIurl());
    }
    if (bid.hasCid()) {
        gen.writeStringField("cid", bid.getCid());
    }
    if (bid.hasCrid()) {
        gen.writeStringField("crid", bid.getCrid());
    }
    writeContentCategories("cat", bid.getCatList(), gen);
    writeEnums("attr", bid.getAttrList(), gen);
    if (bid.hasDealid()) {
        gen.writeStringField("dealid", bid.getDealid());
    }
    if (bid.hasW()) {
        gen.writeNumberField("w", bid.getW());
    }
    if (bid.hasH()) {
        gen.writeNumberField("h", bid.getH());
    }
    if (bid.hasApi()) {
        gen.writeNumberField("api", bid.getApi().getNumber());
    }
    if (bid.hasProtocol()) {
        gen.writeNumberField("protocol", bid.getProtocol().getNumber());
    }
    if (bid.hasQagmediarating()) {
        gen.writeNumberField("qagmediarating", bid.getQagmediarating().getNumber());
    }
    if (bid.hasExp()) {
        gen.writeNumberField("exp", bid.getExp());
    }
}

From source file:net.opentsdb.tsd.HttpJsonSerializer.java

/**
 * Format the results from a timeseries data query
 * @param data_query The TSQuery object used to fetch the results
 * @param results The data fetched from storage
 * @param globals An optional list of global annotation objects
 * @return A ChannelBuffer object to pass on to the caller
 *//*  www . j a  v  a2s  . c om*/
public ChannelBuffer formatQueryV1(final TSQuery data_query, final List<DataPoints[]> results,
        final List<Annotation> globals) {

    final boolean as_arrays = this.query.hasQueryStringParam("arrays");
    final String jsonp = this.query.getQueryStringParam("jsonp");

    // todo - this should be streamed at some point since it could be HUGE
    final ChannelBuffer response = ChannelBuffers.dynamicBuffer();
    final OutputStream output = new ChannelBufferOutputStream(response);
    try {
        // don't forget jsonp
        if (jsonp != null && !jsonp.isEmpty()) {
            output.write((jsonp + "(").getBytes(query.getCharset()));
        }
        JsonGenerator json = JSON.getFactory().createGenerator(output);
        json.writeStartArray();

        for (DataPoints[] separate_dps : results) {
            for (DataPoints dps : separate_dps) {
                json.writeStartObject();

                json.writeStringField("metric", dps.metricName());

                json.writeFieldName("tags");
                json.writeStartObject();
                if (dps.getTags() != null) {
                    for (Map.Entry<String, String> tag : dps.getTags().entrySet()) {
                        json.writeStringField(tag.getKey(), tag.getValue());
                    }
                }
                json.writeEndObject();

                json.writeFieldName("aggregateTags");
                json.writeStartArray();
                if (dps.getAggregatedTags() != null) {
                    for (String atag : dps.getAggregatedTags()) {
                        json.writeString(atag);
                    }
                }
                json.writeEndArray();

                if (data_query.getShowTSUIDs()) {
                    json.writeFieldName("tsuids");
                    json.writeStartArray();
                    final List<String> tsuids = dps.getTSUIDs();
                    Collections.sort(tsuids);
                    for (String tsuid : tsuids) {
                        json.writeString(tsuid);
                    }
                    json.writeEndArray();
                }

                if (!data_query.getNoAnnotations()) {
                    final List<Annotation> annotations = dps.getAnnotations();
                    if (annotations != null) {
                        Collections.sort(annotations);
                        json.writeArrayFieldStart("annotations");
                        for (Annotation note : annotations) {
                            json.writeObject(note);
                        }
                        json.writeEndArray();
                    }

                    if (globals != null && !globals.isEmpty()) {
                        Collections.sort(globals);
                        json.writeArrayFieldStart("globalAnnotations");
                        for (Annotation note : globals) {
                            json.writeObject(note);
                        }
                        json.writeEndArray();
                    }
                }

                // now the fun stuff, dump the data
                json.writeFieldName("dps");

                // default is to write a map, otherwise write arrays
                if (as_arrays) {
                    json.writeStartArray();
                    for (final DataPoint dp : dps) {
                        if (dp.timestamp() < data_query.startTime() || dp.timestamp() > data_query.endTime()) {
                            continue;
                        }
                        final long timestamp = data_query.getMsResolution() ? dp.timestamp()
                                : dp.timestamp() / 1000;
                        json.writeStartArray();
                        json.writeNumber(timestamp);
                        if (dp.isInteger()) {
                            json.writeNumber(dp.longValue());
                        } else {
                            json.writeNumber(dp.doubleValue());
                        }
                        json.writeEndArray();
                    }
                    json.writeEndArray();
                } else {
                    json.writeStartObject();
                    for (final DataPoint dp : dps) {
                        if (dp.timestamp() < (data_query.startTime())
                                || dp.timestamp() > (data_query.endTime())) {
                            continue;
                        }
                        final long timestamp = data_query.getMsResolution() ? dp.timestamp()
                                : dp.timestamp() / 1000;
                        if (dp.isInteger()) {
                            json.writeNumberField(Long.toString(timestamp), dp.longValue());
                        } else {
                            json.writeNumberField(Long.toString(timestamp), dp.doubleValue());
                        }
                    }
                    json.writeEndObject();
                }

                // close the results for this particular query
                json.writeEndObject();
            }
        }

        // close
        json.writeEndArray();
        json.close();

        if (jsonp != null && !jsonp.isEmpty()) {
            output.write(")".getBytes());
        }
        return response;
    } catch (IOException e) {
        LOG.error("Unexpected exception", e);
        throw new RuntimeException(e);
    }
}

From source file:com.streamsets.datacollector.http.JMXJsonServlet.java

private void writeObject(JsonGenerator jg, Object value) throws IOException {
    if (value == null) {
        jg.writeNull();//from w ww .  j  a v a2s  .  c  om
    } else {
        Class<?> c = value.getClass();
        if (c.isArray()) {
            jg.writeStartArray();
            int len = Array.getLength(value);
            for (int j = 0; j < len; j++) {
                Object item = Array.get(value, j);
                writeObject(jg, item);
            }
            jg.writeEndArray();
        } else if (value instanceof Number) {
            Number n = (Number) value;
            jg.writeNumber(n.toString());
        } else if (value instanceof Boolean) {
            Boolean b = (Boolean) value;
            jg.writeBoolean(b);
        } else if (value instanceof CompositeData) {
            CompositeData cds = (CompositeData) value;
            CompositeType comp = cds.getCompositeType();
            Set<String> keys = comp.keySet();
            jg.writeStartObject();
            for (String key : keys) {
                writeAttribute(jg, key, cds.get(key));
            }
            jg.writeEndObject();
        } else if (value instanceof TabularData) {
            TabularData tds = (TabularData) value;
            jg.writeStartArray();
            for (Object entry : tds.values()) {
                writeObject(jg, entry);
            }
            jg.writeEndArray();
        } else if (value instanceof GaugeValue) {
            ((GaugeValue) value).serialize(jg);
        } else {
            jg.writeString(value.toString());
        }
    }
}