Gson
- 11 min read
- 3 chapters
Related on Lably
Through Open-source software and Java (programming language)
History
The Gson library was originally developed for internal purposes at Google, with Version 1.0 released on May 22, 2008, under the terms of the Apache License 2.0. The latest version, 2.11, was released on May 20, 2024.
Sign in to keep reading
2 more chapters are free with a Lably account.
Usage
Gson utilizes reflection, meaning that classes do not have to be modified to be serialized or deserialized. By default, a class only needs a defined default (no-args) constructor; however, this requirement can be circumvented (see Features).
The following example demonstrates the basic usage of Gson when serializing a sample object:
<span id="mwGw"></span><span class="kn" id="mwHA">package</span><span class="w" id="mwHQ"> </span><span class="nn" id="mwHg">example</span><span class="p" id="mwHw">;</span> <span class="kd" id="mwIA">public</span><span class="w" id="mwIQ"> </span><span class="kd" id="mwIg">class</span> <span class="nc" id="mwIw">Car</span><span class="w" id="mwJA"> </span><span class="p" id="mwJQ">{</span> <span class="w" id="mwJg"> </span><span class="kd" id="mwJw">public</span><span class="w" id="mwKA"> </span><span class="n" id="mwKQ">String</span><span class="w" id="mwKg"> </span><span class="n" id="mwKw">manufacturer</span><span class="p" id="mwLA">;</span> <span class="w" id="mwLQ"> </span><span class="kd" id="mwLg">public</span><span class="w" id="mwLw"> </span><span class="n" id="mwMA">String</span><span class="w" id="mwMQ"> </span><span class="n" id="mwMg">model</span><span class="p" id="mwMw">;</span> <span class="w" id="mwNA"> </span><span class="kd" id="mwNQ">public</span><span class="w" id="mwNg"> </span><span class="kt" id="mwNw">double</span><span class="w" id="mwOA"> </span><span class="n" id="mwOQ">capacity</span><span class="p" id="mwOg">;</span> <span class="w" id="mwOw"> </span><span class="kd" id="mwPA">public</span><span class="w" id="mwPQ"> </span><span class="kt" id="mwPg">boolean</span><span class="w" id="mwPw"> </span><span class="n" id="mwQA">accident</span><span class="p" id="mwQQ">;</span> <span class="w" id="mwQg"> </span><span class="kd" id="mwQw">public</span><span class="w" id="mwRA"> </span><span class="nf" id="mwRQ">Car</span><span class="p" id="mwRg">()</span><span class="w" id="mwRw"> </span><span class="p" id="mwSA">{</span> <span class="w" id="mwSQ"> </span><span class="p" id="mwSg">}</span> <span class="w" id="mwSw"> </span><span class="kd" id="mwTA">public</span><span class="w" id="mwTQ"> </span><span class="nf" id="mwTg">Car</span><span class="p" id="mwTw">(</span><span class="n" id="mwUA">String</span><span class="w" id="mwUQ"> </span><span class="n" id="mwUg">manufacturer</span><span class="p" id="mwUw">,</span><span class="w" id="mwVA"> </span><span class="n" id="mwVQ">String</span><span class="w" id="mwVg"> </span><span class="n" id="mwVw">model</span><span class="p" id="mwWA">,</span><span class="w" id="mwWQ"> </span><span class="kt" id="mwWg">double</span><span class="w" id="mwWw"> </span><span class="n" id="mwXA">capacity</span><span class="p" id="mwXQ">,</span><span class="w" id="mwXg"> </span><span class="kt" id="mwXw">boolean</span><span class="w" id="mwYA"> </span><span class="n" id="mwYQ">accident</span><span class="p" id="mwYg">)</span><span class="w" id="mwYw"> </span><span class="p" id="mwZA">{</span> <span class="w" id="mwZQ"> </span><span class="k" id="mwZg">this</span><span class="p" id="mwZw">.</span><span class="na" id="mwaA">manufacturer</span><span class="w" id="mwaQ"> </span><span class="o" id="mwag">=</span><span class="w" id="mwaw"> </span><span class="n" id="mwbA">manufacturer</span><span class="p" id="mwbQ">;</span> <span class="w" id="mwbg"> </span><span class="k" id="mwbw">this</span><span class="p" id="mwcA">.</span><span class="na" id="mwcQ">model</span><span class="w" id="mwcg"> </span><span class="o" id="mwcw">=</span><span class="w" id="mwdA"> </span><span class="n" id="mwdQ">model</span><span class="p" id="mwdg">;</span> <span class="w" id="mwdw"> </span><span class="k" id="mweA">this</span><span class="p" id="mweQ">.</span><span class="na" id="mweg">capacity</span><span class="w" id="mwew"> </span><span class="o" id="mwfA">=</span><span class="w" id="mwfQ"> </span><span class="n" id="mwfg">capacity</span><span class="p" id="mwfw">;</span> <span class="w" id="mwgA"> </span><span class="k" id="mwgQ">this</span><span class="p" id="mwgg">.</span><span class="na" id="mwgw">accident</span><span class="w" id="mwhA"> </span><span class="o" id="mwhQ">=</span><span class="w" id="mwhg"> </span><span class="n" id="mwhw">accident</span><span class="p" id="mwiA">;</span> <span class="w" id="mwiQ"> </span><span class="p" id="mwig">}</span> <span class="w" id="mwiw"> </span><span class="nd" id="mwjA">@Override</span> <span class="w" id="mwjQ"> </span><span class="kd" id="mwjg">public</span><span class="w" id="mwjw"> </span><span class="n" id="mwkA">String</span><span class="w" id="mwkQ"> </span><span class="nf" id="mwkg">toString</span><span class="p" id="mwkw">()</span><span class="w" id="mwlA"> </span><span class="p" id="mwlQ">{</span> <span class="w" id="mwlg"> </span><span class="k" id="mwlw">return</span><span class="w" id="mwmA"> </span><span class="p" id="mwmQ">(</span><span class="s" id="mwmg">"Manufacturer: "</span><span class="w" id="mwmw"> </span><span class="o" id="mwnA">+</span><span class="w" id="mwnQ"> </span><span class="n" id="mwng">manufacturer</span><span class="w" id="mwnw"> </span><span class="o" id="mwoA">+</span><span class="w" id="mwoQ"> </span><span class="s" id="mwog">", "</span><span class="w" id="mwow"> </span><span class="o" id="mwpA">+</span><span class="w" id="mwpQ"> </span><span class="s" id="mwpg">"Model: "</span><span class="w" id="mwpw"> </span><span class="o" id="mwqA">+</span><span class="w" id="mwqQ"> </span><span class="n" id="mwqg">model</span><span class="w" id="mwqw"> </span><span class="o" id="mwrA">+</span><span class="w" id="mwrQ"> </span><span class="s" id="mwrg">", "</span><span class="w" id="mwrw"> </span><span class="o" id="mwsA">+</span><span class="w" id="mwsQ"> </span><span class="s" id="mwsg">"Capacity: "</span><span class="w" id="mwsw"> </span><span class="o" id="mwtA">+</span><span class="w" id="mwtQ"> </span><span class="n" id="mwtg">capacity</span><span class="w" id="mwtw"> </span><span class="o" id="mwuA">+</span><span class="w" id="mwuQ"> </span><span class="s" id="mwug">", "</span><span class="w" id="mwuw"> </span><span class="o" id="mwvA">+</span><span class="w" id="mwvQ"> </span><span class="s" id="mwvg">"Accident: "</span><span class="w" id="mwvw"> </span><span class="o" id="mwwA">+</span><span class="w" id="mwwQ"> </span><span class="n" id="mwwg">accident</span><span class="p" id="mwww">);</span> <span class="w" id="mwxA"> </span><span class="p" id="mwxQ">}</span> <span class="p" id="mwxg">}</span><span id="mwyQ"></span><span class="kn" id="mwyg">package</span><span class="w" id="mwyw"> </span><span class="nn" id="mwzA">example</span><span class="p" id="mwzQ">;</span> <span class="kd" id="mwzg">public</span><span class="w" id="mwzw"> </span><span class="kd" id="mw0A">class</span> <span class="nc" id="mw0Q">Person</span><span class="w" id="mw0g"> </span><span class="p" id="mw0w">{</span> <span class="w" id="mw1A"> </span><span class="kd" id="mw1Q">public</span><span class="w" id="mw1g"> </span><span class="n" id="mw1w">String</span><span class="w" id="mw2A"> </span><span class="n" id="mw2Q">name</span><span class="p" id="mw2g">;</span> <span class="w" id="mw2w"> </span><span class="kd" id="mw3A">public</span><span class="w" id="mw3Q"> </span><span class="n" id="mw3g">String</span><span class="w" id="mw3w"> </span><span class="n" id="mw4A">surname</span><span class="p" id="mw4Q">;</span> <span class="w" id="mw4g"> </span><span class="kd" id="mw4w">public</span><span class="w" id="mw5A"> </span><span class="n" id="mw5Q">Car</span><span class="o" id="mw5g">[]</span><span class="w" id="mw5w"> </span><span class="n" id="mw6A">cars</span><span class="p" id="mw6Q">;</span> <span class="w" id="mw6g"> </span><span class="kd" id="mw6w">public</span><span class="w" id="mw7A"> </span><span class="kt" id="mw7Q">int</span><span class="w" id="mw7g"> </span><span class="n" id="mw7w">phone</span><span class="p" id="mw8A">;</span> <span class="w" id="mw8Q"> </span><span class="kd" id="mw8g">public</span><span class="w" id="mw8w"> </span><span class="kd" id="mw9A">transient</span><span class="w" id="mw9Q"> </span><span class="kt" id="mw9g">int</span><span class="w" id="mw9w"> </span><span class="n" id="mw-A">age</span><span class="p" id="mw-Q">;</span> <span class="w" id="mw-g"> </span><span class="kd" id="mw-w">public</span><span class="w" id="mw_A"> </span><span class="nf" id="mw_Q">Person</span><span class="p" id="mw_g">()</span><span class="w" id="mw_w"> </span><span class="p" id="mwAQA">{</span> <span class="w" id="mwAQE"> </span><span class="p" id="mwAQI">}</span> <span class="w" id="mwAQM"> </span><span class="kd" id="mwAQQ">public</span><span class="w" id="mwAQU"> </span><span class="nf" id="mwAQY">Person</span><span class="p" id="mwAQc">(</span><span class="n" id="mwAQg">String</span><span class="w" id="mwAQk"> </span><span class="n" id="mwAQo">name</span><span class="p" id="mwAQs">,</span><span class="w" id="mwAQw"> </span><span class="n" id="mwAQ0">String</span><span class="w" id="mwAQ4"> </span><span class="n" id="mwAQ8">surname</span><span class="p" id="mwARA">,</span><span class="w" id="mwARE"> </span><span class="kt" id="mwARI">int</span><span class="w" id="mwARM"> </span><span class="n" id="mwARQ">phone</span><span class="p" id="mwARU">,</span><span class="w" id="mwARY"> </span><span class="kt" id="mwARc">int</span><span class="w" id="mwARg"> </span><span class="n" id="mwARk">age</span><span class="p" id="mwARo">,</span><span class="w" id="mwARs"> </span><span class="n" id="mwARw">Car</span><span class="o" id="mwAR0">[]</span><span class="w" id="mwAR4"> </span><span class="n" id="mwAR8">cars</span><span class="p" id="mwASA">)</span><span class="w" id="mwASE"> </span><span class="p" id="mwASI">{</span> <span class="w" id="mwASM"> </span><span class="k" id="mwASQ">this</span><span class="p" id="mwASU">.</span><span class="na" id="mwASY">name</span><span class="w" id="mwASc"> </span><span class="o" id="mwASg">=</span><span class="w" id="mwASk"> </span><span class="n" id="mwASo">name</span><span class="p" id="mwASs">;</span> <span class="w" id="mwASw"> </span><span class="k" id="mwAS0">this</span><span class="p" id="mwAS4">.</span><span class="na" id="mwAS8">surname</span><span class="w" id="mwATA"> </span><span class="o" id="mwATE">=</span><span class="w" id="mwATI"> </span><span class="n" id="mwATM">surname</span><span class="p" id="mwATQ">;</span> <span class="w" id="mwATU"> </span><span class="k" id="mwATY">this</span><span class="p" id="mwATc">.</span><span class="na" id="mwATg">cars</span><span class="w" id="mwATk"> </span><span class="o" id="mwATo">=</span><span class="w" id="mwATs"> </span><span class="n" id="mwATw">cars</span><span class="p" id="mwAT0">;</span> <span class="w" id="mwAT4"> </span><span class="k" id="mwAT8">this</span><span class="p" id="mwAUA">.</span><span class="na" id="mwAUE">phone</span><span class="w" id="mwAUI"> </span><span class="o" id="mwAUM">=</span><span class="w" id="mwAUQ"> </span><span class="n" id="mwAUU">phone</span><span class="p" id="mwAUY">;</span> <span class="w" id="mwAUc"> </span><span class="k" id="mwAUg">this</span><span class="p" id="mwAUk">.</span><span class="na" id="mwAUo">age</span><span class="w" id="mwAUs"> </span><span class="o" id="mwAUw">=</span><span class="w" id="mwAU0"> </span><span class="n" id="mwAU4">age</span><span class="p" id="mwAU8">;</span> <span class="w" id="mwAVA"> </span><span class="p" id="mwAVE">}</span> <span class="w" id="mwAVI"> </span><span class="nd" id="mwAVM">@Override</span> <span class="w" id="mwAVQ"> </span><span class="kd" id="mwAVU">public</span><span class="w" id="mwAVY"> </span><span class="n" id="mwAVc">String</span><span class="w" id="mwAVg"> </span><span class="nf" id="mwAVk">toString</span><span class="p" id="mwAVo">()</span><span class="w" id="mwAVs"> </span><span class="p" id="mwAVw">{</span> <span class="w" id="mwAV0"> </span><span class="n" id="mwAV4">StringBuilder</span><span class="w" id="mwAV8"> </span><span class="n" id="mwAWA">sb</span><span class="w" id="mwAWE"> </span><span class="o" id="mwAWI">=</span><span class="w" id="mwAWM"> </span><span class="k" id="mwAWQ">new</span><span class="w" id="mwAWU"> </span><span class="n" id="mwAWY">StringBuilder</span><span class="p" id="mwAWc">();</span> <span class="w" id="mwAWg"> </span><span class="n" id="mwAWk">sb</span><span class="p" id="mwAWo">.</span><span class="na" id="mwAWs">append</span><span class="p" id="mwAWw">(</span><span class="s" id="mwAW0">"Name: "</span><span class="p" id="mwAW4">).</span><span class="na" id="mwAW8">append</span><span class="p" id="mwAXA">(</span><span class="n" id="mwAXE">name</span><span class="p" id="mwAXI">).</span><span class="na" id="mwAXM">append</span><span class="p" id="mwAXQ">(</span><span class="s" id="mwAXU">" "</span><span class="p" id="mwAXY">).</span><span class="na" id="mwAXc">append</span><span class="p" id="mwAXg">(</span><span class="n" id="mwAXk">surname</span><span class="p" id="mwAXo">).</span><span class="na" id="mwAXs">append</span><span class="p" id="mwAXw">(</span><span class="s" id="mwAX0">"\n"</span><span class="p" id="mwAX4">);</span> <span class="w" id="mwAX8"> </span><span class="n" id="mwAYA">sb</span><span class="p" id="mwAYE">.</span><span class="na" id="mwAYI">append</span><span class="p" id="mwAYM">(</span><span class="s" id="mwAYQ">"Phone: "</span><span class="p" id="mwAYU">).</span><span class="na" id="mwAYY">append</span><span class="p" id="mwAYc">(</span><span class="n" id="mwAYg">phone</span><span class="p" id="mwAYk">).</span><span class="na" id="mwAYo">append</span><span class="p" id="mwAYs">(</span><span class="s" id="mwAYw">"\n"</span><span class="p" id="mwAY0">);</span> <span class="w" id="mwAY4"> </span><span class="n" id="mwAY8">sb</span><span class="p" id="mwAZA">.</span><span class="na" id="mwAZE">append</span><span class="p" id="mwAZI">(</span><span class="s" id="mwAZM">"Age: "</span><span class="p" id="mwAZQ">).</span><span class="na" id="mwAZU">append</span><span class="p" id="mwAZY">(</span><span class="n" id="mwAZc">age</span><span class="p" id="mwAZg">).</span><span class="na" id="mwAZk">append</span><span class="p" id="mwAZo">(</span><span class="s" id="mwAZs">"\n"</span><span class="p" id="mwAZw">);</span> <span class="w" id="mwAZ0"> </span><span class="kt" id="mwAZ4">int</span><span class="w" id="mwAZ8"> </span><span class="n" id="mwAaA">i</span><span class="w" id="mwAaE"> </span><span class="o" id="mwAaI">=</span><span class="w" id="mwAaM"> </span><span class="mi" id="mwAaQ">0</span><span class="p" id="mwAaU">;</span> <span class="w" id="mwAaY"> </span><span class="k" id="mwAac">for</span><span class="w" id="mwAag"> </span><span class="p" id="mwAak">(</span><span class="n" id="mwAao">Car</span><span class="w" id="mwAas"> </span><span class="n" id="mwAaw">car</span><span class="w" id="mwAa0"> </span><span class="p" id="mwAa4">:</span><span class="w" id="mwAa8"> </span><span class="n" id="mwAbA">cars</span><span class="p" id="mwAbE">)</span><span class="w" id="mwAbI"> </span><span class="p" id="mwAbM">{</span> <span class="w" id="mwAbQ"> </span><span class="n" id="mwAbU">i</span><span class="o" id="mwAbY">++</span><span class="p" id="mwAbc">;</span> <span class="w" id="mwAbg"> </span><span class="n" id="mwAbk">sb</span><span class="p" id="mwAbo">.</span><span class="na" id="mwAbs">append</span><span class="p" id="mwAbw">(</span><span class="s" id="mwAb0">"Car "</span><span class="p" id="mwAb4">).</span><span class="na" id="mwAb8">append</span><span class="p" id="mwAcA">(</span><span class="n" id="mwAcE">i</span><span class="p" id="mwAcI">).</span><span class="na" id="mwAcM">append</span><span class="p" id="mwAcQ">(</span><span class="s" id="mwAcU">": "</span><span class="p" id="mwAcY">).</span><span class="na" id="mwAcc">append</span><span class="p" id="mwAcg">(</span><span class="n" id="mwAck">car</span><span class="p" id="mwAco">).</span><span class="na" id="mwAcs">append</span><span class="p" id="mwAcw">(</span><span class="s" id="mwAc0">"\n"</span><span class="p" id="mwAc4">);</span> <span class="w" id="mwAc8"> </span><span class="p" id="mwAdA">}</span> <span class="w" id="mwAdE"> </span><span class="k" id="mwAdI">return</span><span class="w" id="mwAdM"> </span><span class="n" id="mwAdQ">sb</span><span class="p" id="mwAdU">.</span><span class="na" id="mwAdY">toString</span><span class="p" id="mwAdc">();</span> <span class="w" id="mwAdg"> </span><span class="p" id="mwAdk">}</span> <span class="p" id="mwAdo">}</span><span id="mwAd0"></span><span class="kn" id="mwAd4">package</span><span class="w" id="mwAd8"> </span><span class="nn" id="mwAeA">main</span><span class="p" id="mwAeE">;</span> <span class="kn" id="mwAeI">import</span><span class="w" id="mwAeM"> </span><span class="nn" id="mwAeQ">example.Car</span><span class="p" id="mwAeU">;</span> <span class="kn" id="mwAeY">import</span><span class="w" id="mwAec"> </span><span class="nn" id="mwAeg">example.Person</span><span class="p" id="mwAek">;</span> <span class="kn" id="mwAeo">import</span><span class="w" id="mwAes"> </span><span class="nn" id="mwAew">com.google.gson.Gson</span><span class="p" id="mwAe0">;</span> <span class="kn" id="mwAe4">import</span><span class="w" id="mwAe8"> </span><span class="nn" id="mwAfA">com.google.gson.GsonBuilder</span><span class="p" id="mwAfE">;</span> <span class="kd" id="mwAfI">public</span><span class="w" id="mwAfM"> </span><span class="kd" id="mwAfQ">class</span> <span class="nc" id="mwAfU">Main</span><span class="w" id="mwAfY"> </span><span class="p" id="mwAfc">{</span> <span class="w" id="mwAfg"> </span><span class="kd" id="mwAfk">public</span><span class="w" id="mwAfo"> </span><span class="kd" id="mwAfs">static</span><span class="w" id="mwAfw"> </span><span class="kt" id="mwAf0">void</span><span class="w" id="mwAf4"> </span><span class="nf" id="mwAf8">main</span><span class="p" id="mwAgA">(</span><span class="n" id="mwAgE">String</span><span class="o" id="mwAgI">[]</span><span class="w" id="mwAgM"> </span><span class="n" id="mwAgQ">args</span><span class="p" id="mwAgU">)</span><span class="w" id="mwAgY"> </span><span class="p" id="mwAgc">{</span> <span class="w" id="mwAgg"> </span><span class="c1" id="mwAgk">// Enable pretty printing for demonstration purposes</span> <span class="w" id="mwAgo"> </span><span class="c1" id="mwAgs">// Can also directly create instance with `new Gson()`; this will produce compact JSON</span> <span class="w" id="mwAgw"> </span><span class="n" id="mwAg0">Gson</span><span class="w" id="mwAg4"> </span><span class="n" id="mwAg8">gson</span><span class="w" id="mwAhA"> </span><span class="o" id="mwAhE">=</span><span class="w" id="mwAhI"> </span><span class="k" id="mwAhM">new</span><span class="w" id="mwAhQ"> </span><span class="n" id="mwAhU">GsonBuilder</span><span class="p" id="mwAhY">().</span><span class="na" id="mwAhc">setPrettyPrinting</span><span class="p" id="mwAhg">().</span><span class="na" id="mwAhk">create</span><span class="p" id="mwAho">();</span> <span class="w" id="mwAhs"> </span><span class="n" id="mwAhw">Car</span><span class="w" id="mwAh0"> </span><span class="n" id="mwAh4">audi</span><span class="w" id="mwAh8"> </span><span class="o" id="mwAiA">=</span><span class="w" id="mwAiE"> </span><span class="k" id="mwAiI">new</span><span class="w" id="mwAiM"> </span><span class="n" id="mwAiQ">Car</span><span class="p" id="mwAiU">(</span><span class="s" id="mwAiY">"Audi"</span><span class="p" id="mwAic">,</span><span class="w" id="mwAig"> </span><span class="s" id="mwAik">"A4"</span><span class="p" id="mwAio">,</span><span class="w" id="mwAis"> </span><span class="mf" id="mwAiw">1.8</span><span class="p" id="mwAi0">,</span><span class="w" id="mwAi4"> </span><span class="kc" id="mwAi8">false</span><span class="p" id="mwAjA">);</span> <span class="w" id="mwAjE"> </span><span class="n" id="mwAjI">Car</span><span class="w" id="mwAjM"> </span><span class="n" id="mwAjQ">skoda</span><span class="w" id="mwAjU"> </span><span class="o" id="mwAjY">=</span><span class="w" id="mwAjc"> </span><span class="k" id="mwAjg">new</span><span class="w" id="mwAjk"> </span><span class="n" id="mwAjo">Car</span><span class="p" id="mwAjs">(</span><span class="s" id="mwAjw">"Škoda"</span><span class="p" id="mwAj0">,</span><span class="w" id="mwAj4"> </span><span class="s" id="mwAj8">"Octavia"</span><span class="p" id="mwAkA">,</span><span class="w" id="mwAkE"> </span><span class="mf" id="mwAkI">2.0</span><span class="p" id="mwAkM">,</span><span class="w" id="mwAkQ"> </span><span class="kc" id="mwAkU">true</span><span class="p" id="mwAkY">);</span> <span class="w" id="mwAkc"> </span><span class="n" id="mwAkg">Car</span><span class="o" id="mwAkk">[]</span><span class="w" id="mwAko"> </span><span class="n" id="mwAks">cars</span><span class="w" id="mwAkw"> </span><span class="o" id="mwAk0">=</span><span class="w" id="mwAk4"> </span><span class="p" id="mwAk8">{</span><span class="n" id="mwAlA">audi</span><span class="p" id="mwAlE">,</span><span class="w" id="mwAlI"> </span><span class="n" id="mwAlM">skoda</span><span class="p" id="mwAlQ">};</span> <span class="w" id="mwAlU"> </span><span class="n" id="mwAlY">Person</span><span class="w" id="mwAlc"> </span><span class="n" id="mwAlg">johnDoe</span><span class="w" id="mwAlk"> </span><span class="o" id="mwAlo">=</span><span class="w" id="mwAls"> </span><span class="k" id="mwAlw">new</span><span class="w" id="mwAl0"> </span><span class="n" id="mwAl4">Person</span><span class="p" id="mwAl8">(</span><span class="s" id="mwAmA">"John"</span><span class="p" id="mwAmE">,</span><span class="w" id="mwAmI"> </span><span class="s" id="mwAmM">"Doe"</span><span class="p" id="mwAmQ">,</span><span class="w" id="mwAmU"> </span><span class="mi" id="mwAmY">2025550191</span><span class="p" id="mwAmc">,</span><span class="w" id="mwAmg"> </span><span class="mi" id="mwAmk">35</span><span class="p" id="mwAmo">,</span><span class="w" id="mwAms"> </span><span class="n" id="mwAmw">cars</span><span class="p" id="mwAm0">);</span> <span class="w" id="mwAm4"> </span><span class="n" id="mwAm8">System</span><span class="p" id="mwAnA">.</span><span class="na" id="mwAnE">out</span><span class="p" id="mwAnI">.</span><span class="na" id="mwAnM">println</span><span class="p" id="mwAnQ">(</span><span class="n" id="mwAnU">gson</span><span class="p" id="mwAnY">.</span><span class="na" id="mwAnc">toJson</span><span class="p" id="mwAng">(</span><span class="n" id="mwAnk">johnDoe</span><span class="p" id="mwAno">));</span> <span class="w" id="mwAns"> </span><span class="p" id="mwAnw">}</span> <span class="p" id="mwAn0">}</span>Calling the code of the above Main class will result in the following JSON output:
<span id="mwAoI"></span><span class="p" id="mwAoM">{</span> <span class="w" id="mwAoQ"> </span><span class="nt" id="mwAoU">"name"</span><span class="p" id="mwAoY">:</span><span class="w" id="mwAoc"> </span><span class="s2" id="mwAog">"John"</span><span class="p" id="mwAok">,</span> <span class="w" id="mwAoo"> </span><span class="nt" id="mwAos">"surname"</span><span class="p" id="mwAow">:</span><span class="w" id="mwAo0"> </span><span class="s2" id="mwAo4">"Doe"</span><span class="p" id="mwAo8">,</span> <span class="w" id="mwApA"> </span><span class="nt" id="mwApE">"cars"</span><span class="p" id="mwApI">:</span><span class="w" id="mwApM"> </span><span class="p" id="mwApQ">[</span> <span class="w" id="mwApU"> </span><span class="p" id="mwApY">{</span> <span class="w" id="mwApc"> </span><span class="nt" id="mwApg">"manufacturer"</span><span class="p" id="mwApk">:</span><span class="w" id="mwApo"> </span><span class="s2" id="mwAps">"Audi"</span><span class="p" id="mwApw">,</span> <span class="w" id="mwAp0"> </span><span class="nt" id="mwAp4">"model"</span><span class="p" id="mwAp8">:</span><span class="w" id="mwAqA"> </span><span class="s2" id="mwAqE">"A4"</span><span class="p" id="mwAqI">,</span> <span class="w" id="mwAqM"> </span><span class="nt" id="mwAqQ">"capacity"</span><span class="p" id="mwAqU">:</span><span class="w" id="mwAqY"> </span><span class="mf" id="mwAqc">1.8</span><span class="p" id="mwAqg">,</span> <span class="w" id="mwAqk"> </span><span class="nt" id="mwAqo">"accident"</span><span class="p" id="mwAqs">:</span><span class="w" id="mwAqw"> </span><span class="kc" id="mwAq0">false</span> <span class="w" id="mwAq4"> </span><span class="p" id="mwAq8">},</span> <span class="w" id="mwArA"> </span><span class="p" id="mwArE">{</span> <span class="w" id="mwArI"> </span><span class="nt" id="mwArM">"manufacturer"</span><span class="p" id="mwArQ">:</span><span class="w" id="mwArU"> </span><span class="s2" id="mwArY">"Škoda"</span><span class="p" id="mwArc">,</span> <span class="w" id="mwArg"> </span><span class="nt" id="mwArk">"model"</span><span class="p" id="mwAro">:</span><span class="w" id="mwArs"> </span><span class="s2" id="mwArw">"Octavia"</span><span class="p" id="mwAr0">,</span> <span class="w" id="mwAr4"> </span><span class="nt" id="mwAr8">"capacity"</span><span class="p" id="mwAsA">:</span><span class="w" id="mwAsE"> </span><span class="mf" id="mwAsI">2.0</span><span class="p" id="mwAsM">,</span> <span class="w" id="mwAsQ"> </span><span class="nt" id="mwAsU">"accident"</span><span class="p" id="mwAsY">:</span><span class="w" id="mwAsc"> </span><span class="kc" id="mwAsg">true</span> <span class="w" id="mwAsk"> </span><span class="p" id="mwAso">}</span> <span class="w" id="mwAss"> </span><span class="p" id="mwAsw">],</span> <span class="w" id="mwAs0"> </span><span class="nt" id="mwAs4">"phone"</span><span class="p" id="mwAs8">:</span><span class="w" id="mwAtA"> </span><span class="mi" id="mwAtE">2025550191</span> <span class="p" id="mwAtI">}</span>Since the Person's field age is marked as transient, it is not included in the output.
<span id="mwAtw"></span><span class="kn" id="mwAt0">package</span><span class="w" id="mwAt4"> </span><span class="nn" id="mwAt8">main</span><span class="p" id="mwAuA">;</span> <span class="kn" id="mwAuE">import</span><span class="w" id="mwAuI"> </span><span class="nn" id="mwAuM">example.Person</span><span class="p" id="mwAuQ">;</span> <span class="kn" id="mwAuU">import</span><span class="w" id="mwAuY"> </span><span class="nn" id="mwAuc">com.google.gson.Gson</span><span class="p" id="mwAug">;</span> <span class="kd" id="mwAuk">public</span><span class="w" id="mwAuo"> </span><span class="kd" id="mwAus">class</span> <span class="nc" id="mwAuw">Main</span><span class="w" id="mwAu0"> </span><span class="p" id="mwAu4">{</span> <span class="w" id="mwAu8"> </span><span class="kd" id="mwAvA">public</span><span class="w" id="mwAvE"> </span><span class="kd" id="mwAvI">static</span><span class="w" id="mwAvM"> </span><span class="kt" id="mwAvQ">void</span><span class="w" id="mwAvU"> </span><span class="nf" id="mwAvY">main</span><span class="p" id="mwAvc">(</span><span class="n" id="mwAvg">String</span><span class="o" id="mwAvk">[]</span><span class="w" id="mwAvo"> </span><span class="n" id="mwAvs">args</span><span class="p" id="mwAvw">)</span><span class="w" id="mwAv0"> </span><span class="p" id="mwAv4">{</span> <span class="w" id="mwAv8"> </span><span class="n" id="mwAwA">Gson</span><span class="w" id="mwAwE"> </span><span class="n" id="mwAwI">gson</span><span class="w" id="mwAwM"> </span><span class="o" id="mwAwQ">=</span><span class="w" id="mwAwU"> </span><span class="k" id="mwAwY">new</span><span class="w" id="mwAwc"> </span><span class="n" id="mwAwg">Gson</span><span class="p" id="mwAwk">();</span> <span class="w" id="mwAwo"> </span><span class="n" id="mwAws">String</span><span class="w" id="mwAww"> </span><span class="n" id="mwAw0">json</span><span class="w" id="mwAw4"> </span><span class="o" id="mwAw8">=</span><span class="w" id="mwAxA"> </span><span class="s" id="mwAxE">"{\"name\":\"John\",\"surname\":\"Doe\",\"cars\":[{\"manufacturer\":\"Audi\",\"model\":\"A4\","</span><span class="w" id="mwAxI"> </span><span class="o" id="mwAxM">+</span> <span class="w" id="mwAxQ"> </span><span class="s" id="mwAxU">"\"capacity\":1.8,\"accident\":false},{\"manufacturer\":\"Škoda\",\"model\":\"Octavia\",\"capacity\""</span><span class="w" id="mwAxY"> </span><span class="o" id="mwAxc">+</span> <span class="w" id="mwAxg"> </span><span class="s" id="mwAxk">":2.0,\"accident\":true}],\"phone\":2025550191}"</span><span class="p" id="mwAxo">;</span> <span class="w" id="mwAxs"> </span><span class="n" id="mwAxw">Person</span><span class="w" id="mwAx0"> </span><span class="n" id="mwAx4">johnDoe</span><span class="w" id="mwAx8"> </span><span class="o" id="mwAyA">=</span><span class="w" id="mwAyE"> </span><span class="n" id="mwAyI">gson</span><span class="p" id="mwAyM">.</span><span class="na" id="mwAyQ">fromJson</span><span class="p" id="mwAyU">(</span><span class="n" id="mwAyY">json</span><span class="p" id="mwAyc">,</span><span class="w" id="mwAyg"> </span><span class="n" id="mwAyk">Person</span><span class="p" id="mwAyo">.</span><span class="na" id="mwAys">class</span><span class="p" id="mwAyw">);</span> <span class="w" id="mwAy0"> </span><span class="n" id="mwAy4">System</span><span class="p" id="mwAy8">.</span><span class="na" id="mwAzA">out</span><span class="p" id="mwAzE">.</span><span class="na" id="mwAzI">println</span><span class="p" id="mwAzM">(</span><span class="n" id="mwAzQ">johnDoe</span><span class="p" id="mwAzU">.</span><span class="na" id="mwAzY">toString</span><span class="p" id="mwAzc">());</span> <span class="w" id="mwAzg"> </span><span class="p" id="mwAzk">}</span> <span class="p" id="mwAzo">}</span>To deserialize the output produced by the last example, you can execute the code above, which generates the following output:
<span id="mwAz4"></span><span class="go" id="mwAz8">Name: John Doe</span> <span class="go" id="mwA0A">Phone: 2025550191</span> <span class="go" id="mwA0E">Age: 0</span> <span class="go" id="mwA0I">Car 1: Manufacturer: Audi, Model: A4, Capacity: 1.8, Accident: false</span> <span class="go" id="mwA0M">Car 2: Manufacturer: Škoda, Model: Octavia, Capacity: 2.0, Accident: true</span>
This shows how Gson can be used with the Java Platform Module System for the example above:
<span id="mwA0g"></span><span class="n" id="mwA0k">module</span><span class="w" id="mwA0o"> </span><span class="n" id="mwA0s">GsonExample</span><span class="w" id="mwA0w"> </span><span class="p" id="mwA00">{</span> <span class="w" id="mwA04"> </span><span class="n" id="mwA08">requires</span><span class="w" id="mwA1A"> </span><span class="n" id="mwA1E">com</span><span class="p" id="mwA1I">.</span><span class="na" id="mwA1M">google</span><span class="p" id="mwA1Q">.</span><span class="na" id="mwA1U">gson</span><span class="p" id="mwA1Y">;</span> <span class="w" id="mwA1c"> </span><span class="c1" id="mwA1g">// Open package declared in the example above to allow Gson to use reflection on classes</span> <span class="w" id="mwA1k"> </span><span class="c1" id="mwA1o">// inside the package (and also access non-public fields)</span> <span class="w" id="mwA1s"> </span><span class="n" id="mwA1w">opens</span><span class="w" id="mwA10"> </span><span class="n" id="mwA14">example</span><span class="w" id="mwA18"> </span><span class="n" id="mwA2A">to</span><span class="w" id="mwA2E"> </span><span class="n" id="mwA2I">com</span><span class="p" id="mwA2M">.</span><span class="na" id="mwA2Q">google</span><span class="p" id="mwA2U">.</span><span class="na" id="mwA2Y">gson</span><span class="p" id="mwA2c">;</span> <span class="p" id="mwA2g">}</span>For more extensive examples, see Gson's usage guide on their GitHub repository.
Features
- Gson can handle collections, generic types, and nested classes (including inner classes, which cannot be done by default).
- When deserializing, Gson navigates the type tree of the object being deserialized, which means that it ignores extra fields present in the JSON input.
- The user can:
- write a custom serializer and/or deserializer so that they can control the whole process, and even deserialize instances of classes for which the source code is inaccessible.
- write an InstanceCreator, which allows them to deserialize instances of classes without a defined no-args constructor.
- Gson is highly customizable, as you can specify:
- Compact/pretty printing (whether you want compact or readable output)
- How to handle null object fields – by default they are not present in the output
- Excluding fields - rules of what fields are intended to be excluded from deserialization
- How to convert Java field names

