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:org.talend.dataprep.schema.xls.serialization.XlsRunnable.java

private void serializeColumns(Workbook workbook, JsonGenerator generator, Sheet sheet,
        List<ColumnMetadata> columns) throws IOException {

    for (int i = 0, size = sheet.getLastRowNum(); i <= size; i++) {
        if (limit > 0 && i > limit) {
            break;
        }// w ww  .  j  a v  a 2  s .com
        // is header line?
        Row row = sheet.getRow(i);
        if (isHeaderLine(i, columns) || row == null) {
            continue;
        }

        generator.writeStartObject();
        for (ColumnMetadata columnMetadata : columns) {

            // do not write the values if this has been detected as an header
            if (i < columnMetadata.getHeaderSize()) {
                continue;
            }

            int colId = Integer.parseInt(columnMetadata.getId());
            String cellValue = getCellValueAsString(row.getCell(colId),
                    workbook.getCreationHelper().createFormulaEvaluator());
            LOG.trace("cellValue for {}/{}: {}", i, colId, cellValue);
            generator.writeFieldName(columnMetadata.getId());
            if (cellValue != null) {
                generator.writeString(cellValue);
            } else {
                generator.writeNull();
            }
        }
        generator.writeEndObject();
    }
}

From source file:org.openiot.security.oauth.lsm.LSMOAuth20PermissionController.java

@Override
protected ModelAndView handleRequestInternal(final HttpServletRequest request,
        final HttpServletResponse response) throws Exception {

    final String clientId = request.getParameter(OAuthConstants.CLIENT_ID);
    log.debug("clientId : {}", clientId);
    final String accessToken = request.getParameter(OAuthConstants.ACCESS_TOKEN);
    log.debug("accessToken : {}", accessToken);

    final String callerClientId = request.getParameter(CALLER_CLIENT_ID);
    log.debug("callerClientId : {}", callerClientId);
    final String callerAccessToken = request.getParameter(CALLER_ACCESS_TOKEN);
    log.debug("callerAccessToken : {}", callerAccessToken);

    final String userClientId = request.getParameter(USER_CLIENT_ID);
    log.debug("userClientId : {}", userClientId);

    final String userAccessToken = request.getParameter(USER_ACCESS_TOKEN);
    log.debug("userAccessToken : {}", userAccessToken);

    final String targetClientId = request.getParameter(TARGET_CLIENT_ID);
    log.debug("targetClientId : {}", targetClientId);

    response.setContentType("application/json");

    // accessToken is required
    if (StringUtils.isBlank(accessToken)) {
        log.error("missing accessToken");
        writeErrorMessage(response, OAuthConstants.MISSING_ACCESS_TOKEN);
        return null;
    }//ww w.ja  va 2  s . c om

    // clientId is required
    if (StringUtils.isBlank(clientId)) {
        log.error("missing clientId");
        writeErrorMessage(response, MISSING_CLIENT_ID);
        return null;
    }

    // userToken is required
    if (StringUtils.isBlank(userAccessToken)) {
        log.error("missing user accessToken");
        writeErrorMessage(response, "missing_userAccessToken");
        return null;
    }

    // target clientId is required
    if (StringUtils.isBlank(targetClientId)) {
        log.error("missing target clientId");
        writeErrorMessage(response, MISSING_CLIENT_ID + "for_target");
        return null;
    }

    // caller accessToken and clientId are required if one of them is provided
    if (!StringUtils.isBlank(callerAccessToken) || !StringUtils.isBlank(callerClientId)) {
        if (StringUtils.isBlank(callerAccessToken)) {
            log.error("missing caller accessToken");
            writeErrorMessage(response, "missing_callerAccessToken");
            return null;
        } else if (StringUtils.isBlank(callerClientId)) {
            log.error("missing caller clientId");
            writeErrorMessage(response, "missing_callerClientId");
            return null;
        }
    }

    // get ticket granting ticket
    final TicketGrantingTicket ticketGrantingTicket = (TicketGrantingTicket) this.ticketRegistry
            .getTicket(accessToken);
    if (ticketGrantingTicket == null || ticketGrantingTicket.isExpired()) {
        log.error("expired accessToken : {}", accessToken);
        writeErrorMessage(response, OAuthConstants.EXPIRED_ACCESS_TOKEN);
        return null;
    }

    // get ticket granting ticket for the user
    final TicketGrantingTicket userTicketGrantingTicket;
    if (StringUtils.equals(accessToken, userAccessToken))
        userTicketGrantingTicket = ticketGrantingTicket;
    else {
        userTicketGrantingTicket = (TicketGrantingTicket) this.ticketRegistry.getTicket(userAccessToken);
        if (userTicketGrantingTicket == null || userTicketGrantingTicket.isExpired()) {
            log.error("expired user accessToken : {}", userAccessToken);
            writeErrorMessage(response, OAuthConstants.EXPIRED_ACCESS_TOKEN + "_for_user");
            return null;
        }
    }

    // Retrieve all registered services
    final Collection<RegisteredService> services = servicesManager.getAllServices();

    // If called accessToken and clientId are provided, check their validity
    if (!StringUtils.isBlank(callerAccessToken)) {
        // get ticket granting ticket for the caller
        final TicketGrantingTicket callerTicketGrantingTicket = (TicketGrantingTicket) this.ticketRegistry
                .getTicket(callerAccessToken);
        if (callerTicketGrantingTicket == null || callerTicketGrantingTicket.isExpired()) {
            log.error("expired accessToken : {}", callerAccessToken);
            writeErrorMessage(response, OAuthConstants.EXPIRED_ACCESS_TOKEN + "_for_caller");
            return null;
        }

        // name of the CAS service for caller
        RegisteredService callerService = null;
        for (final RegisteredService aService : services) {
            if (StringUtils.equals(aService.getName(), callerClientId)) {
                callerService = aService;
                break;
            }
        }

        if (callerService == null) {
            log.error("nonexistent caller clientId : {}", callerClientId);
            writeErrorMessage(response, NONEXISTENT_CLIENT_ID + "for_caller");
            return null;
        }
    }

    // if user clienId is provided, check its validity
    if (!StringUtils.isBlank(userClientId)) {
        RegisteredService userService = null;
        for (final RegisteredService aService : services) {
            if (StringUtils.equals(aService.getName(), userClientId)) {
                userService = aService;
                break;
            }
        }

        if (userService == null) {
            log.error("nonexistent clientId : {}", userClientId);
            writeErrorMessage(response, NONEXISTENT_CLIENT_ID + "_for_user");
            return null;
        }
    }

    // check validity of clientId
    RegisteredService service = null;
    for (final RegisteredService aService : services) {
        if (StringUtils.equals(aService.getName(), clientId)) {
            service = aService;
            break;
        }
    }

    if (service == null) {
        log.error("nonexistent clientId : {}", clientId);
        writeErrorMessage(response, NONEXISTENT_CLIENT_ID);
        return null;
    }

    // check validity of target clientId
    RegisteredService targetService = null;
    for (final RegisteredService aService : services) {
        if (StringUtils.equals(aService.getName(), targetClientId)) {
            targetService = aService;
            break;
        }
    }

    if (targetService == null) {
        log.error("nonexistent target clientId : {}", clientId);
        writeErrorMessage(response, NONEXISTENT_CLIENT_ID + "for_target");
        return null;
    }

    // TODO: check if the TGT is granted to the client?!
    // final TicketGrantingTicket rawTicket =
    // ((AbstractDistributedTicketRegistry.TicketGrantingTicketDelegator)ticketGrantingTicket).getTicket();
    // final Field servicesField =
    // rawTicket.getClass().getDeclaredField("services");
    // servicesField.setAccessible(true);
    // HashMap<String, Service> servicesMap = new HashMap<String,
    // Service>();
    // servicesMap = (HashMap<String, Service>)
    // servicesField.get(rawTicket);
    // log.error("ServiceMaps is empty ? {}", servicesMap.isEmpty());
    // for(Map.Entry<String, Service> entry : servicesMap.entrySet()){
    // AbstractWebApplicationService webAppService =
    // (AbstractWebApplicationService) entry.getValue();
    // log.error("Service for ticket {} is {}", rawTicket.getId(),
    // webAppService.getId());
    // }
    // if (!servicesMap.containsKey(service.getId()) ||
    // !servicesMap.get(service.getId()).equals(service)) {
    // log.error("Ticket is not granted to client : {}", clientId);
    // jsonGenerator.writeStartObject();
    // jsonGenerator.writeStringField("error", TICKET_NOT_GRANTED);
    // jsonGenerator.writeEndObject();
    // jsonGenerator.close();
    // response.flushBuffer();
    // return null;
    // }

    // Check if the caller has permission for retrieving permission information
    if (!targetClientId.equals(clientId)) {
        final Principal principal = ticketGrantingTicket.getAuthentication().getPrincipal();
        if (!isPermitted(principal.getId(), targetService.getId())) {
            log.error("[{} from {}] is not permitted to retrieve permission information on [{}]",
                    principal.getId(), clientId, targetClientId);
            writeErrorMessage(response, "permission_denied");
            return null;
        }
    }

    final JsonFactory jsonFactory = new JsonFactory();
    final JsonGenerator jsonGenerator = jsonFactory.createJsonGenerator(response.getWriter());

    final Principal principal = userTicketGrantingTicket.getAuthentication().getPrincipal();
    final Map<String, Set<String>> permissions = extractPermissions(targetService.getId(), principal.getId());

    jsonGenerator.writeStartObject();
    jsonGenerator.writeStringField(CasWrapperProfile.ID, principal.getId());

    jsonGenerator.writeArrayFieldStart("role_permissions");

    for (final String roleName : permissions.keySet()) {
        jsonGenerator.writeStartObject();
        jsonGenerator.writeArrayFieldStart(roleName);

        for (final String permission : permissions.get(roleName))
            jsonGenerator.writeString(permission);

        jsonGenerator.writeEndArray();
        jsonGenerator.writeEndObject();
    }

    jsonGenerator.writeEndArray();
    jsonGenerator.writeEndObject();
    jsonGenerator.close();
    response.flushBuffer();

    return null;
}

From source file:org.apache.olingo.commons.core.serialization.JsonSerializer.java

protected void primitiveValue(final JsonGenerator jgen, final EdmTypeInfo typeInfo, final Object value)
        throws IOException, EdmPrimitiveTypeException {

    final EdmPrimitiveTypeKind kind = typeInfo == null ? null : typeInfo.getPrimitiveTypeKind();
    final boolean isNumber = kind == null ? value instanceof Number : ArrayUtils.contains(NUMBER_TYPES, kind);
    final boolean isBoolean = kind == null ? value instanceof Boolean : kind == EdmPrimitiveTypeKind.Boolean;

    if (value == null) {
        jgen.writeNull();/* w  w  w  . j a v a 2 s. c om*/
    } else if (isBoolean) {
        jgen.writeBoolean((Boolean) value);
    } else {
        final String serialized = kind == null ? value.toString()
                // TODO: add facets
                : EdmPrimitiveTypeFactory.getInstance(kind).valueToString(value, null, null,
                        Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null);
        if (isNumber) {
            jgen.writeNumber(serialized);
        } else {
            jgen.writeString(serialized);
        }
    }
}

From source file:com.algodefu.yeti.web.rest.ClusterFormatSerializer.java

@Override
public void serialize(ClusterFormat clusterFormat, JsonGenerator jgen, SerializerProvider provider)
        throws IOException, JsonProcessingException {
    StringBuilder sb = new StringBuilder();
    String sep = "; ";

    // symbol/*from  w w  w  . j  a v  a  2  s.c o m*/
    sb.append(clusterFormat.getSymbol());
    sb.append(sep);

    // type
    sb.append(clusterFormat.getType());
    sb.append(sep);

    // beginDt
    sb.append(clusterFormat.getBeginDt().format(dtf));
    sb.append(sep);

    // endDt
    sb.append(clusterFormat.getEndDt().format(dtf));
    sb.append(sep);

    // count
    sb.append("count: " + clusterFormat.getCount());
    sb.append(sep);

    switch (clusterFormat.getType()) {
    case TIMEFRAME:
    case TICKTIME:
        sb.append("timeInterval: " + clusterFormat.getTimeInterval());
        sb.append(sep);
        sb.append("chronoUnit: " + clusterFormat.getChronoUnit());
        break;
    case PRICERANGE:
        sb.append("priceRange: " + clusterFormat.getPriceRange());
        break;
    case VOLUME:
        sb.append("clusterVolume: " + clusterFormat.getClusterVolume());
        break;
    case TRADECOUNT:
        sb.append("maxTicksInCluster: " + clusterFormat.getMaxTicksInCluster());
        break;
    }

    jgen.writeString(sb.toString());

}

From source file:org.apache.olingo.client.core.serialization.JsonSerializer.java

protected void primitiveValue(final JsonGenerator jgen, final EdmTypeInfo typeInfo, final Object value)
        throws IOException, EdmPrimitiveTypeException {

    final EdmPrimitiveTypeKind kind = typeInfo == null ? null : typeInfo.getPrimitiveTypeKind();
    final boolean isNumber = kind == null ? value instanceof Number : ArrayUtils.contains(NUMBER_TYPES, kind);
    final boolean isBoolean = kind == null ? value instanceof Boolean : kind == EdmPrimitiveTypeKind.Boolean;

    if (value == null) {
        jgen.writeNull();/* w w w.j a  va  2s.co m*/
    } else if (isBoolean) {
        jgen.writeBoolean((Boolean) value);
    } else {
        String serialized = kind == null ? value.toString()
                // TODO: add facets
                : EdmPrimitiveTypeFactory.getInstance(kind).valueToString(value, null, null,
                        Constants.DEFAULT_PRECISION, Constants.DEFAULT_SCALE, null);

        if (isIEEE754Compatible
                && (kind == EdmPrimitiveTypeKind.Int64 || kind == EdmPrimitiveTypeKind.Decimal)) {
            jgen.writeString(serialized);
        } else if (isNumber) {
            jgen.writeNumber(serialized);
        } else {
            jgen.writeString(serialized);
        }
    }
}

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

protected void writeNativeFields(Native nativ, JsonGenerator gen) throws IOException {
    switch (nativ.getRequestOneofCase()) {
    case REQUEST_NATIVE:
        gen.writeFieldName("request");
        if (factory().isForceNativeAsObject()) {
            nativeWriter().writeNativeRequest(nativ.getRequestNative(), gen);
        } else {/*  w w  w.  j av a2  s  .  c  om*/
            gen.writeString(nativeWriter().writeNativeRequest(nativ.getRequestNative()));
        }
        break;
    case REQUEST:
        gen.writeStringField("request", nativ.getRequest());
        break;
    case REQUESTONEOF_NOT_SET:
        checkRequired(false);
    }
    if (nativ.hasVer()) {
        gen.writeStringField("ver", nativ.getVer());
    }
    writeEnums("api", nativ.getApiList(), gen);
    writeEnums("battr", nativ.getBattrList(), gen);
}

From source file:org.apache.airavata.db.AbstractThriftSerializer.java

@Override
public void serialize(final T value, final JsonGenerator jgen, final SerializerProvider provider)
        throws IOException {
    jgen.writeStartObject();/*from  w  ww  . ja  v a  2s . c  o  m*/
    for (final E field : getFieldValues()) {
        if (value.isSet(field)) {
            final Object fieldValue = value.getFieldValue(field);
            if (fieldValue != null) {
                log.debug("Adding field {} to the JSON string...",
                        CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, field.getFieldName()));

                jgen.writeFieldName(CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, field.getFieldName()));
                if (fieldValue instanceof Short) {
                    jgen.writeNumber((Short) fieldValue);
                } else if (fieldValue instanceof Integer) {
                    jgen.writeNumber((Integer) fieldValue);
                } else if (fieldValue instanceof Long) {
                    jgen.writeNumber((Long) fieldValue);
                } else if (fieldValue instanceof Double) {
                    jgen.writeNumber((Double) fieldValue);
                } else if (fieldValue instanceof Float) {
                    jgen.writeNumber((Float) fieldValue);
                } else if (fieldValue instanceof Boolean) {
                    jgen.writeBoolean((Boolean) fieldValue);
                } else if (fieldValue instanceof String) {
                    jgen.writeString(fieldValue.toString());
                } else if (fieldValue instanceof Collection) {
                    log.debug("Array opened for field {}.",
                            CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, field.getFieldName()));
                    jgen.writeStartArray();
                    for (final Object arrayObject : (Collection<?>) fieldValue) {
                        jgen.writeObject(arrayObject);
                    }
                    jgen.writeEndArray();
                    log.debug("Array closed for field {}.",
                            CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, field.getFieldName()));
                } else {
                    jgen.writeObject(fieldValue);
                }
            } else {
                log.debug("Skipping converting field {} to JSON:  value is null!",
                        CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, field.getFieldName()));
            }
        } else {
            log.debug("Skipping converting field {} to JSON:  field has not been set!",
                    CaseFormat.UPPER_CAMEL.to(CaseFormat.LOWER_CAMEL, field.getFieldName()));
        }
    }
    jgen.writeEndObject();
}

From source file:de.fraunhofer.iosb.ilt.sta.serialize.EntitySerializer.java

@Override
public void serialize(Entity entity, JsonGenerator gen, SerializerProvider serializers)
        throws IOException, JsonProcessingException {
    gen.writeStartObject();/*from   ww w  .j ava2s  .  com*/
    try {
        BasicBeanDescription beanDescription = serializers.getConfig()
                .introspect(serializers.constructType(entity.getClass()));
        List<BeanPropertyDefinition> properties = beanDescription.findProperties();
        for (BeanPropertyDefinition property : properties) {
            // 0. check if it should be serialized
            if (selectedProperties != null) {
                if (!selectedProperties.contains(property.getName())) {
                    continue;
                }
            }
            // 1. is it a NavigableElement?
            if (NavigableElement.class.isAssignableFrom(property.getAccessor().getRawType())) {
                Object rawValue = property.getAccessor().getValue(entity);
                if (rawValue != null) {
                    NavigableElement value = (NavigableElement) rawValue;
                    // If navigation link set, output navigation link.
                    if (value.getNavigationLink() != null && !value.getNavigationLink().isEmpty()) {
                        gen.writeFieldName(property.getName() + "@iot.navigationLink");
                        gen.writeString(value.getNavigationLink());
                    }
                    // If object should not be exported, skip any further processing.
                    if (!value.isExportObject()) {
                        continue;
                    }
                }
            }
            // 2. check if property has CustomSerialization annotation -> use custom serializer
            Annotation annotation = property.getAccessor().getAnnotation(CustomSerialization.class);
            if (annotation != null) {
                serializeFieldCustomized(entity, gen, property, properties, (CustomSerialization) annotation);
            } else {
                serializeField(entity, gen, serializers, beanDescription, property);
            }
            // 3. check if property is EntitySet than eventually write count
            if (EntitySet.class.isAssignableFrom(property.getAccessor().getRawType())) {
                Object rawValue = property.getAccessor().getValue(entity);
                if (rawValue != null) {
                    EntitySet set = (EntitySet) rawValue;
                    long count = set.getCount();
                    if (count >= 0) {
                        gen.writeNumberField(property.getName() + "@iot.count", count);
                    }
                    String nextLink = set.getNextLink();
                    if (nextLink != null) {
                        gen.writeStringField(property.getName() + "@iot.nextLink", nextLink);
                    }
                }
            }
        }
    } catch (Exception e) {
        LOGGER.error("could not serialize Entity", e);
        throw new IOException("could not serialize Entity", e);
    } finally {
        gen.writeEndObject();
    }
}

From source file:org.talend.dataprep.schema.xls.serialization.XlsxStreamRunnable.java

/**
 * @see Runnable#run()/*from ww w .  j a va2 s  .  c  o m*/
 */
@Override
public void run() {
    try {
        JsonGenerator generator = jsonFactory.createGenerator(jsonOutput);
        Workbook workbook = StreamingReader.builder() //
                .bufferSize(4096) //
                .rowCacheSize(1) //
                .open(rawContent);
        try {
            Sheet sheet = StringUtils.isEmpty(metadata.getSheetName()) ? //
                    workbook.getSheetAt(0) : workbook.getSheet(metadata.getSheetName());
            generator.writeStartArray();
            for (Row row : sheet) {
                if (limit > 0 && row.getRowNum() > limit) {
                    break;
                }
                if (!XlsSerializer.isHeaderLine(row.getRowNum(), metadata.getRowMetadata().getColumns())) {
                    generator.writeStartObject();
                    // data quality Analyzer doesn't like to not have all columns even if we don't have any values
                    // so create so field with empty value otherwise we get exceptions
                    int i = 0;
                    for (ColumnMetadata columnMetadata : metadata.getRowMetadata().getColumns()) {
                        Cell cell = row.getCell(i);
                        String cellValue = cell == null ? null : cell.getStringCellValue(); // StringUtils.EMPTY
                        generator.writeFieldName(columnMetadata.getId());
                        if (cellValue != null) {
                            generator.writeString(cellValue);
                        } else {
                            generator.writeNull();
                        }
                        i++;
                    }
                    generator.writeEndObject();
                }
            }
            generator.writeEndArray();
            generator.flush();
        } finally {
            workbook.close();
        }
    } catch (Exception e) {
        // Consumer may very well interrupt consumption of stream (in case of limit(n) use for sampling).
        // This is not an issue as consumer is allowed to partially consumes results, it's up to the
        // consumer to ensure data it consumed is consistent.
        LOG.debug("Unable to continue serialization for {}. Skipping remaining content.", metadata.getId(), e);
    } finally {
        try {
            jsonOutput.close();
        } catch (IOException e) {
            LOG.error("Unable to close output", e);
        }
    }
}

From source file:msearch.filmlisten.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());
        }/*from   ww w.  java 2  s . co  m*/
    }
    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);
    }
}