Skip to content

Releases: google/gson

Gson 2.11.0

20 May 13:22
Compare
Choose a tag to compare

Most important changes

  • Added default ProGuard / R8 rules (@Marcono1234, #2397, #2420; @sgjesse, #2448; @sfreilich)
    If you are using ProGuard or R8 (for example for Android projects) you might not need any special Gson configuration anymore if your classes have a no-args constructor and use @SerializedName for their fields.
  • On Android, Gson now requires API level 21 or newer
  • Added new Strictness API (@marten-voorberg & fellow students, #2437)
    Some of Gson's API is still lenient by default, but you can now use the newly added methods GsonBuilder#setStrictness, JsonReader#setStrictness and JsonWriter#setStrictness with Strictness.STRICT to override this behavior and to instead strictly adhere to the JSON specification when parsing.
  • New FormattingStyle class to allow configuring line breaks in JSON output (@mihnita, #2231)
    Can be set using GsonBuilder#setFormattingStyle and JsonWriter#setFormattingStyle.
  • TypeToken can no longer capture type variables by default (@Marcono1234, #2376)
    This was previously a common source of issues. The newly thrown exception refers to a Troubleshooting Guide article which explains this in more detail and provides suggestions for updating affected code.
  • Added serialization support for anonymous and local classes with a custom adapter (@Marcono1234, #2498)
    This affects for example List implementations returned by libraries such as Guava which are implemented as anonymous class, which were previously serialized as null. Anonymous and local classes without custom adapter will still be serialized as null.
  • Added dependency on com.google.errorprone:error_prone_annotations
    Your project can use Maven or Gradle dependency exclusions to remove the transitive error_prone_annotations dependency from Gson. Or if you are manually maintaining dependencies as JARs in your project you can omit error_prone_annotations. And it should still work correctly.
    But Gson itself does declare it as a required dependency, and if you don't perform any custom configuration, then Maven or Gradle will by default try to download and use it.
  • Many exception messages now refer to the Troubleshooting Guide (@Marcono1234, #2357)
    Feedback regarding the Troubleshooting Guide is appreciated!
  • Officially documented that JVM languages other than Java might not be fully supported, see the README.
  • Guarantee that JsonElement#toString produces JSON output (@Marcono1234, #2659)

Other changes

Bug fixes

  • Fixed incorrect JsonPrimitive#equals results for large BigInteger values (@MaicolAntali, #2311)
  • Fixed incorrect JsonPrimitive#equals results for large BigDecimal values (@MaicolAntali, #2364)
  • Fixed JsonReader throwing NumberFormatException instead of MalformedJsonException for malformed Unicode escape sequences (@MaicolAntali, #2337)
  • Fixed TypeToken#getParameterized returning bogus ParameterizedType for non-generic types (@Marcono1234, #2447)
  • Fixed Java Record adapter not working for GraalVM Native Image (@eamonnmcmanus, #2465)
  • Fixed JsonWriter#name not throwing exception when no JSON object is currently being written (@shivam-sehgal, #2475; @Marcono1234, #2476)
  • Fixed Gson#getDelegateAdapter not working properly for @JsonAdapter (@Marcono1234, #2435)
    Note that null is now not allowed as skipPast value anymore, which was previously allowed but undocumented.
  • Fixed GsonBuilder not rejecting type adapters for Object and JsonElement, whose default adapters cannot be overridden (@sachinp97; #2479)
  • Fixed no limits being enforced when deserializing BigDecimal and BigInteger (@Marcono1234, #2510)
    The new limits prevent potential performance problems when user code uses the deserialized numbers. Gson itself was and is not affected by these performance problems. The limits should be high enough to not cause issues for most use cases, but feedback is appreciated.
  • Fixed GsonBuilder#setDateFormat not rejecting invalid date formats (@Carpe-Wang, #2538)
  • Fixed GsonBuilder#setDateFormat not rejecting invalid date styles (@Marcono1234, #2545)
  • Fixed GsonBuilder#setDateFormat ignoring partial DEFAULT style (@Marcono1234, #2556)
  • Fixed TypeToken#isAssignableFrom throwing AssertionError in some cases (@Marcono1234, #2544)
  • Fixed date adapters not restoring time zone after parsing (@Carpe-Wang, #2549)
  • Fixed TypeToken#equals erroneously returning false for equal generic type parameters in some cases (@d-william, #2599)
  • Fixed incorrect inherited URLs in pom.xml (@Marcono1234, #2351)

Performance improvements

Gson maintenance

GitHub repository

Other


Many thanks to @Marcono1234 for drafting these release notes.

Gson 2.10.1

06 Jan 17:23
Compare
Choose a tag to compare

This is technically a minor release rather than a patch release because there is one small API change: a new JsonObject.isEmpty() method.

What's Changed: User-Visible Changes

Site Documentation and Maintenance Changes (these were already visible)

Other Changes

New Contributors (thanks!)

Full Changelog: gson-parent-2.10...gson-parent-2.10.1

Gson 2.10

25 Oct 01:29
Compare
Choose a tag to compare

Most important changes

  • Support for serializing and deserializing Java records, on Java ≥ 16. (#2201)

  • Add JsonArray.asList and JsonObject.asMap view methods (#2225)

  • Fix TypeAdapterRuntimeTypeWrapper not detecting reflective TreeTypeAdapter and FutureTypeAdapter (#1787)

  • Improve JsonReader.skipValue() (#2062)

  • Perform numeric conversion for primitive numeric type adapters (#2158)

  • Add Gson.fromJson(..., TypeToken) overloads (#1700)

  • Fix changes to GsonBuilder affecting existing Gson instances (#1815)

  • Make JsonElement conversion methods more consistent and fix javadoc (#2178)

  • Throw UnsupportedOperationException when JsonWriter.jsonValue is not supported (#1651)

  • Disallow JsonObject Entry.setValue(null) (#2167)

  • Fix TypeAdapter.toJson throwing AssertionError for custom IOException (#2172)

  • Convert null to JsonNull for JsonArray.set (#2170)

  • Fixed nullSafe usage. (#1555)

  • Validate TypeToken.getParameterized arguments (#2166)

  • Fix #1702: Gson.toJson creates CharSequence which does not implement toString (#1703)

  • Prefer existing adapter for concurrent Gson.getAdapter calls (#2153)

  • Improve ArrayTypeAdapter for Object[] (#1716)

  • Improve AppendableWriter performance (#1706)

List of all changes

New Contributors

Full Changelog: gson-parent-2.9.1...gson-parent-2.10

Gson 2.9.1

31 Jul 21:39
Compare
Choose a tag to compare
  • Make Object and JsonElement deserialization iterative rather than recursive (#1912)
  • Added parsing support for enum that has overridden toString() method (#1950)
  • Removed support for building Gson with Gradle (#2081)
  • Removed obsolete codegen hierarchy (#2099)
  • Add support for reflection access filter (#1905)
  • Improve TypeToken creation validation (#2072)
  • Add explicit support for float in JsonWriter (#2130, #2132)
  • Fail when parsing invalid local date (#2134)

Also many small improvements to javadoc.

Gson 2.9.0

11 Feb 19:42
Compare
Choose a tag to compare

The minimum supported Java version changes from 6 to 7.

  • Change target Java version to 7 (#2043)
  • Put module-info.class into Multi-Release JAR folder (#2013)
  • Improve error message when abstract class cannot be constructed (#1814)
  • Support EnumMap deserialization (#2071)
  • Add LazilyParsedNumber default adapter (#2060)
  • Fix JsonReader.hasNext() returning true at end of document (#2061)
  • Remove Gradle build support. Build script was outdated and not actively maintained anymore (#2063)
  • Add GsonBuilder.disableJdkUnsafe() (#1904)
  • Add UPPER_CASE_WITH_UNDERSCORES in FieldNamingPolicy (#2024)
  • Fix failing to serialize Collection or Map with inaccessible constructor (#1902)
  • Improve TreeTypeAdapter thread-safety (#1976)
  • Fix Gson.newJsonWriter ignoring lenient and HTML-safe setting (#1989)
  • Delete unused LinkedHashTreeMap (#1992)
  • Make default adapters stricter; improve exception messages (#2000)
  • Fix FieldNamingPolicy.upperCaseFirstLetter uppercasing non-letter (#2004)

Thanks to our contributors, especially @Marcono1234!

Gson 2.8.9

29 Oct 20:43
Compare
Choose a tag to compare
  • Make OSGi bundle's dependency on sun.misc optional (#1993).
  • Deprecate Gson.excluder() exposing internal Excluder class (#1986).
  • Prevent Java deserialization of internal classes (#1991).
  • Improve number strategy implementation (#1987).
  • Fix LongSerializationPolicy null handling being inconsistent with Gson (#1990).
  • Support arbitrary Number implementation for Object and Number deserialization (#1290).
  • Bump proguard-maven-plugin from 2.4.0 to 2.5.1 (#1980).
  • Don't exclude static local classes (#1969).
  • Fix RuntimeTypeAdapterFactory depending on internal Streams class (#1959).
  • Improve Maven build (#1964).
  • Make dependency on java.sql optional (#1707).

Gson 2.8.8

20 Aug 17:04
Compare
Choose a tag to compare
  • Fixed issue with recursive types (#1390).
  • Better behaviour with Java 9+ and Unsafe if there is a security manager (#1712).
  • EnumTypeAdapter now works better when ProGuard has obfuscated enum fields (#1495).