Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Invalid primitive conversion in toJsonTree() #2803

Open
1 task done
nbali opened this issue Feb 3, 2025 · 0 comments
Open
1 task done

Invalid primitive conversion in toJsonTree() #2803

nbali opened this issue Feb 3, 2025 · 0 comments
Labels

Comments

@nbali
Copy link

nbali commented Feb 3, 2025

Gson version

2.12.1
2.10
2.9.1

Java / Android version

Java 17.0.10+11-LTS-240

Used tools

  • Maven; version: 3.9.9

Description

The numbers gets converted into broader range (like short to long), but it wasn't a few versions before

Expected behavior

The numbers should be kept as is.

Actual behavior

Short, integer, etc gets converted to long

Reproduction steps

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;

public class GsonPrimitiveTest {
    
    static class TestData {
        // boolean boolean_ = true;
        byte byte_ = 1;
        char char_ = 1;
        short short_ = 1;
        int int_ = 1;
        long long_ = 1L;
        float float_ = 1.f;
        double double_ = 1.d;
        
        // Boolean Boolean_ = true;
        Byte Byte_ = 1;
        Character Character_ = 1;
        Short Short_ = 1;
        Integer Integer_ = 1;
        Long Long_ = 1L;
        Float Float_ = 1.f;
        Double Double_ = 1.d;
    }
    
    public static void main(String[] args) {
        final TestData td = new TestData();
        final Gson gson = new GsonBuilder().create();
        final JsonObject json = gson.toJsonTree(td).getAsJsonObject();
        
        for (String key : json.keySet()) {
            System.out.println(String.format("%10s -> %s", key, json.get(key).getAsJsonPrimitive().getAsNumber().getClass()));
        }
    }
    
}

Gson version 2.12.1:

     byte_ -> class java.lang.Long
     char_ -> class com.google.gson.internal.LazilyParsedNumber
    short_ -> class java.lang.Long
      int_ -> class java.lang.Long
     long_ -> class java.lang.Long
    float_ -> class java.lang.Float
   double_ -> class java.lang.Double
     Byte_ -> class java.lang.Long
Character_ -> class com.google.gson.internal.LazilyParsedNumber
    Short_ -> class java.lang.Long
  Integer_ -> class java.lang.Long
     Long_ -> class java.lang.Long
    Float_ -> class java.lang.Float
   Double_ -> class java.lang.Double

Gson version 2.10:

     byte_ -> class java.lang.Long
     char_ -> class com.google.gson.internal.LazilyParsedNumber
    short_ -> class java.lang.Long
      int_ -> class java.lang.Long
     long_ -> class java.lang.Long
    float_ -> class java.lang.Float
   double_ -> class java.lang.Double
     Byte_ -> class java.lang.Long
Character_ -> class com.google.gson.internal.LazilyParsedNumber
    Short_ -> class java.lang.Long
  Integer_ -> class java.lang.Long
     Long_ -> class java.lang.Long
    Float_ -> class java.lang.Float
   Double_ -> class java.lang.Double

Gson version 2.9.1:

     byte_ -> class java.lang.Byte
     char_ -> class com.google.gson.internal.LazilyParsedNumber
    short_ -> class java.lang.Short
      int_ -> class java.lang.Integer
     long_ -> class java.lang.Long
    float_ -> class java.lang.Float
   double_ -> class java.lang.Double
     Byte_ -> class java.lang.Byte
Character_ -> class com.google.gson.internal.LazilyParsedNumber
    Short_ -> class java.lang.Short
  Integer_ -> class java.lang.Integer
     Long_ -> class java.lang.Long
    Float_ -> class java.lang.Float
   Double_ -> class java.lang.Double

Diff between 2.9.1 and 2.10
Image

Exception stack trace

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant