{"id":306,"date":"2024-03-23T00:53:58","date_gmt":"2024-03-22T23:53:58","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=306"},"modified":"2024-04-02T00:54:24","modified_gmt":"2024-04-01T23:54:24","slug":"inkludierung-von-null-werten-in-json-serialisierung-mit-jackson-und-gson","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=306","title":{"rendered":"Inkludierung von Null-Werten in JSON-Serialisierung mit Jackson und Gson"},"content":{"rendered":"\n<p>Die Serialisierung von Java-Objekten in das JSON-Format ist eine h\u00e4ufige Anforderung in der Entwicklung von Anwendungen, insbesondere in der Webentwicklung und bei der Erstellung von APIs. Bei der Arbeit mit JSON kann es vorkommen, dass Java-Objekte Null-Werte enthalten. Die Art und Weise, wie diese Null-Werte behandelt werden, kann je nach den Anforderungen der Anwendung variieren. In diesem Artikel werden wir uns damit befassen, wie man Null-Werte in der JSON-Serialisierung mit den beiden popul\u00e4ren Java-Bibliotheken Jackson und Gson behandelt.<\/p>\n\n\n\n<p><strong>Jackson<\/strong><\/p>\n\n\n\n<p>Jackson ist eine leistungsstarke JSON-Bibliothek f\u00fcr Java, die eine umfangreiche Unterst\u00fctzung f\u00fcr JSON-Daten bietet. Standardm\u00e4\u00dfig ignoriert Jackson Null-Werte w\u00e4hrend der Serialisierung. Das bedeutet, dass Felder mit dem Wert <code>null<\/code> nicht im generierten JSON erscheinen. Dieses Verhalten kann jedoch ge\u00e4ndert werden, wenn Null-Werte explizit inkludiert werden sollen.<\/p>\n\n\n\n<p>Um Null-Werte in der JSON-Serialisierung mit Jackson zu inkludieren, k\u00f6nnen wir verschiedene Ans\u00e4tze verwenden. Eine M\u00f6glichkeit besteht darin, die <code>JsonInclude.Include.NON_NULL<\/code>-Annotation auf Klassenebene oder Feldebene zu verwenden. Diese Annotation gibt an, dass Felder mit Null-Werten nicht serialisiert werden sollen. Hier ist ein Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> com.fasterxml.jackson.annotation.JsonInclude;\n<span class=\"hljs-keyword\">import<\/span> com.fasterxml.jackson.databind.ObjectMapper;\n\n@JsonInclude(JsonInclude.Include.ALWAYS) <span class=\"hljs-comment\">\/\/ Include null values globally<\/span>\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MyClass<\/span> <\/span>{\n    private <span class=\"hljs-built_in\">String<\/span> name;\n    private Integer age;\n    <span class=\"hljs-comment\">\/\/ Getter and Setter methods<\/span>\n}\n\n<span class=\"hljs-comment\">\/\/ Serializing object to JSON<\/span>\nObjectMapper mapper = <span class=\"hljs-keyword\">new<\/span> ObjectMapper();\n<span class=\"hljs-built_in\">String<\/span> jsonString = mapper.writeValueAsString(myObject);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird die <code>JsonInclude.Include.ALWAYS<\/code>-Annotation verwendet, um anzugeben, dass Null-Werte immer in die JSON-Ausgabe aufgenommen werden sollen. Wenn Sie m\u00f6chten, dass Null-Werte nur f\u00fcr bestimmte Felder enthalten sind, k\u00f6nnen Sie die Annotation auf Feldebene anwenden:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">public<\/span> <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MyClass<\/span> <\/span>{\n    @JsonInclude(JsonInclude.<span class=\"hljs-keyword\">Include<\/span>.ALWAYS)\n    <span class=\"hljs-keyword\">private<\/span> String name;\n    <span class=\"hljs-keyword\">private<\/span> Integer age;\n    <span class=\"hljs-comment\">\/\/ Getter and Setter methods<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Mit dieser Konfiguration wird das Feld <code>name<\/code> immer im JSON enthalten sein, auch wenn es den Wert <code>null<\/code> hat, w\u00e4hrend das Feld <code>age<\/code> ignoriert wird, wenn es <code>null<\/code> ist.<\/p>\n\n\n\n<p>Eine weitere M\u00f6glichkeit besteht darin, benutzerdefinierte Serialisierer zu erstellen, die das gew\u00fcnschte Verhalten f\u00fcr Null-Werte steuern. Dies kann durch Implementieren der <code>JsonSerializer<\/code>-Schnittstelle erfolgen und die <code>serialize<\/code>-Methode entsprechend anzupassen.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> com.fasterxml.jackson.core.JsonGenerator;\n<span class=\"hljs-keyword\">import<\/span> com.fasterxml.jackson.databind.JsonSerializer;\n<span class=\"hljs-keyword\">import<\/span> com.fasterxml.jackson.databind.SerializerProvider;\n<span class=\"hljs-keyword\">import<\/span> java.io.IOException;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">NullSerializer<\/span> <span class=\"hljs-keyword\">extends<\/span> <span class=\"hljs-title\">JsonSerializer<\/span>&lt;<span class=\"hljs-title\">Object<\/span>&gt; <\/span>{\n    @Override\n    public <span class=\"hljs-keyword\">void<\/span> serialize(<span class=\"hljs-built_in\">Object<\/span> value, JsonGenerator gen, SerializerProvider serializers) throws IOException {\n        <span class=\"hljs-keyword\">if<\/span> (value == <span class=\"hljs-literal\">null<\/span>) {\n            gen.writeNull();\n        } <span class=\"hljs-keyword\">else<\/span> {\n            gen.writeObject(value);\n        }\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Dann m\u00fcssen Sie den Serializer f\u00fcr Ihre Klassenfelder konfigurieren:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">public <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">MyClass<\/span> <\/span>{\n    @JsonSerialize(using = NullSerializer.class)\n    private <span class=\"hljs-built_in\">String<\/span> name;\n    <span class=\"hljs-comment\">\/\/ Getter and Setter methods<\/span>\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Mit dieser Konfiguration wird der <code>NullSerializer<\/code> verwendet, um das Feld <code>name<\/code> zu serialisieren. Wenn das Feld <code>null<\/code> ist, wird ein <code>null<\/code>-Wert im JSON erzeugt.<\/p>\n\n\n\n<p><strong>Gson<\/strong><\/p>\n\n\n\n<p>Gson ist eine Java-Bibliothek, die von Google entwickelt wurde und eine einfache API f\u00fcr die JSON-Verarbeitung bereitstellt. Im Gegensatz zu Jackson serialisiert Gson standardm\u00e4\u00dfig Null-Werte, dh Felder mit dem Wert <code>null<\/code> werden im JSON generiert. Dennoch bietet Gson auch M\u00f6glichkeiten, das Verhalten der Serialisierung von Null-Werten anzupassen.<\/p>\n\n\n\n<p>Eine M\u00f6glichkeit besteht darin, den Gson-Builder zu konfigurieren, um das gew\u00fcnschte Verhalten f\u00fcr Null-Werte festzulegen. Dies kann durch Verwendung der <code>serializeNulls()<\/code>-Methode erfolgen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Gson gson = <span class=\"hljs-keyword\">new<\/span> GsonBuilder().serializeNulls().create();\n<span class=\"hljs-built_in\">String<\/span> jsonString = gson.toJson(myObject);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Mit <code>serializeNulls()<\/code> werden Null-Werte explizit in die JSON-Ausgabe aufgenommen. Wenn Sie m\u00f6chten, dass Null-Werte ignoriert werden, verwenden Sie stattdessen <code>excludeFieldsWithNullValues()<\/code>.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Gson gson = <span class=\"hljs-keyword\">new<\/span> GsonBuilder().excludeFieldsWithNullValues().create();\n<span class=\"hljs-built_in\">String<\/span> jsonString = gson.toJson(myObject);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Eine andere M\u00f6glichkeit besteht darin, benutzerdefinierte Serialisierer zu erstellen, \u00e4hnlich wie bei Jackson. Dies kann durch Implementieren der <code>JsonSerializer<\/code>-Schnittstelle und Anpassen der <code>serialize<\/code>-Methode erreicht werden.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> com.google.gson.JsonElement;\n<span class=\"hljs-keyword\">import<\/span> com.google.gson.JsonNull;\n<span class=\"hljs-keyword\">import<\/span> com.google.gson.JsonSerializationContext;\n<span class=\"hljs-keyword\">import<\/span> com.google.gson.JsonSerializer;\n<span class=\"hljs-keyword\">import<\/span> java.lang.reflect.Type;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">NullSerializer<\/span> <span class=\"hljs-title\">implements<\/span> <span class=\"hljs-title\">JsonSerializer<\/span>&lt;<span class=\"hljs-title\">Object<\/span>&gt; <\/span>{\n    @Override\n    public JsonElement serialize(<span class=\"hljs-built_in\">Object<\/span> src, Type typeOfSrc, JsonSerializationContext context) {\n        <span class=\"hljs-keyword\">return<\/span> src == <span class=\"hljs-literal\">null<\/span> ? JsonNull.INSTANCE : context.serialize(src);\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Dann m\u00fcssen Sie den Serializer f\u00fcr Ihre Klassenfelder konfigurieren:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">Gson gson = <span class=\"hljs-keyword\">new<\/span> GsonBuilder().registerTypeAdapter(MyClass.class, <span class=\"hljs-keyword\">new<\/span> NullSerializer()).create();\n<span class=\"hljs-built_in\">String<\/span> jsonString = gson.toJson(myObject);<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Mit dieser Konfiguration wird der <code>NullSerializer<\/code> verwendet, um das Objekt zu serialisieren, wodurch Null-Werte entsprechend behandelt werden.<\/p>\n\n\n\n<p>Insgesamt bieten sowohl Jackson als auch Gson verschiedene Ans\u00e4tze, um Null-Werte in der JSON-Serialisierung anzupassen. Durch die Verwendung der bereitgestellten Funktionen k\u00f6nnen Entwickler das gew\u00fcnschte Verhalten f\u00fcr ihre Anwendung erzielen und eine effektive JSON-Verarbeitung sicherstellen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Die Serialisierung von Java-Objekten in das JSON-Format ist eine h\u00e4ufige Anforderung in der Entwicklung von Anwendungen, insbesondere in der Webentwicklung und bei der Erstellung von APIs. Bei der Arbeit mit JSON kann es vorkommen, dass Java-Objekte Null-Werte enthalten. Die Art und Weise, wie diese Null-Werte behandelt werden, kann je nach den Anforderungen der Anwendung variieren. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-306","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/306","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=306"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/306\/revisions"}],"predecessor-version":[{"id":307,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/306\/revisions\/307"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=306"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=306"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=306"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}