@@ -70,39 +70,56 @@ public byte[] writeTo(Object value) {
7070 private static Object toJavaObject (JsonElement element ) {
7171 if (element == null || element instanceof JsonNull ) {
7272 return null ;
73- } else if (element instanceof JsonObject obj ) {
74- Map <String , Object > map = new LinkedHashMap <>();
75- for (Map .Entry <String , JsonElement > entry : obj .entrySet ()) {
76- map .put (entry .getKey (), toJavaObject (entry .getValue ()));
77- }
78- return map ;
79- } else if (element instanceof JsonArray arr ) {
80- List <Object > list = new ArrayList <>(arr .size ());
81- for (JsonElement item : arr ) {
82- list .add (toJavaObject (item ));
83- }
84- return list ;
85- } else if (element instanceof JsonPrimitive prim ) {
86- if (prim .isBoolean ()) {
87- return prim .getAsBoolean ();
88- } else if (prim .isString ()) {
89- return prim .getAsString ();
90- } else {
91- // Number
92- String raw = prim .getAsString ();
93- if (raw .indexOf ('.' ) < 0 && raw .indexOf ('e' ) < 0 && raw .indexOf ('E' ) < 0 ) {
94- try {
95- return Long .parseLong (raw );
96- } catch (NumberFormatException _) {
97- // falls through to Double for out-of-range integers
98- }
99- }
100- return Double .parseDouble (raw );
101- }
73+ }
74+ if (element instanceof JsonObject obj ) {
75+ return toMap (obj );
76+ }
77+ if (element instanceof JsonArray arr ) {
78+ return toList (arr );
79+ }
80+ if (element instanceof JsonPrimitive prim ) {
81+ return toPrimitive (prim );
10282 }
10383 throw new IllegalStateException ("Unexpected JsonElement type: " + element .getClass ());
10484 }
10585
86+ private static Map <String , Object > toMap (JsonObject obj ) {
87+ Map <String , Object > map = new LinkedHashMap <>();
88+ for (Map .Entry <String , JsonElement > entry : obj .entrySet ()) {
89+ map .put (entry .getKey (), toJavaObject (entry .getValue ()));
90+ }
91+ return map ;
92+ }
93+
94+ private static List <Object > toList (JsonArray arr ) {
95+ List <Object > list = new ArrayList <>(arr .size ());
96+ for (JsonElement item : arr ) {
97+ list .add (toJavaObject (item ));
98+ }
99+ return list ;
100+ }
101+
102+ private static Object toPrimitive (JsonPrimitive prim ) {
103+ if (prim .isBoolean ()) {
104+ return prim .getAsBoolean ();
105+ }
106+ if (prim .isString ()) {
107+ return prim .getAsString ();
108+ }
109+ return toNumber (prim .getAsString ());
110+ }
111+
112+ private static Object toNumber (String raw ) {
113+ if (raw .indexOf ('.' ) < 0 && raw .indexOf ('e' ) < 0 && raw .indexOf ('E' ) < 0 ) {
114+ try {
115+ return Long .parseLong (raw );
116+ } catch (NumberFormatException _) {
117+ // Falls through to Double for out-of-Long-range integers.
118+ }
119+ }
120+ return Double .parseDouble (raw );
121+ }
122+
106123 private static <T > TypeAdapter <T > isoStringWriter (Function <T , String > toIso ) {
107124 return new TypeAdapter <T >() {
108125 @ Override
0 commit comments