Mittwoch, Januar 29, 2020

Wie man JsonGenerator pretty-print-Date-und DateTime-Werte?

Ich bin mit dieser Methode konvertieren Sie jedes beliebige Objekt in einen json-string:

private String objectToJson(Object object) throws IOException {
        //write JSON
        StringWriter writer = new StringWriter();
        ObjectMapper mapper = new ObjectMapper();
        final JsonGenerator jsonGenerator = mapper.getJsonFactory().createJsonGenerator(writer);
        jsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter());

        mapper.writeValue(jsonGenerator, object);
        return writer.toString();
    }

Wenn das Objekt gedruckt wird, enthält Felder, die von java.util.Datum oder jodatime der DateTime-Wert, der gedruckte Wert ist die Anzahl von Millisekunden seit Beginn der Epoche zurück. Ich möchte, statt zu pretty-print für Sie in einem standard – „HH:MM:SS“ – Schreibweise. Wie gehe ich dabei vor?

InformationsquelleAutor ripper234 | 2010-12-14

2 Kommentare

  1. 7

    Weil die epoch-Zeitstempel (Anzahl Millisekunden seit dem 1. Januar 1970, UTC) ist die am meisten effiziente und genaue Darstellung der Zeit, fast alle Datums-und zeitbezogene Objekte werden serialisiert, um es. Natürlich können Sie überschreiben, und wenn Sie möchten, verwenden Sie das format in der Frage genannten, würden Sie brauchen, fügen Sie den folgenden code:

    DateFormat myDateFormat = new SimpleDateFormat("hh:mm:ss");
    objectMapper.getSerializationConfig().setDateFormat(myDateFormat);
    objectMapper.getDeserializationConfig().setDateFormat(myDateFormat); 

    Weitere Informationen bezüglich der Termine und Zeiten in der Jackson-JSON-Prozessor finden Sie unter dem folgenden link: http://wiki.fasterxml.com/JacksonFAQDateHandling

  2. 8

    Dies wurde bereits erwähnt in der FAQ erste Antwort Punkte, aber nur für den Fall: Sie können wählen zwischen numerischen und textuellen Darstellung (numerisch wird standardmäßig verwendet, da es sehr viel schneller) mit dieser Funktion:

    objectMapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);

    dadurch wird die Verwendung der Standard-Datum-format, die Sie dann neu zu definieren, wie erwähnt (mit setDateFormat).

    Auch: Sie vereinfachen Sie den code in etwa so:

    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
    mapper.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, false);
    return mapper.writeValueAsString(object);

    statt mit StringWriter und JsonGenerator ausdrücklich.

    • +1 für die sauberere Lösung. Aber ich brauchte, um SerializationConfig.Funktion.INDENT_OUTPUT.
    • ah. my bad, wird die Korrektur der Schreibfehler
    • wow, das ist schön. sehr hilfreich!!!
    • Hinweis: wenn Sie mit Spring 3.1+ können Sie ganz einfach verwenden Sie eine benutzerdefinierte ObjectMapper, indem Sie die folgenden Ryan ‚ s Antwort auf stackoverflow.com/questions/7672211/…

Kostenlose Online-Tests