How to deserialize a list using GSON or another JSON library in Java?
Solution 1:
With Gson, you'd just need to do something like:
List<Video> videos = gson.fromJson(json, new TypeToken<List<Video>>(){}.getType());
You might also need to provide a no-arg constructor on the Video
class you're deserializing to.
Solution 2:
Another way is to use an array as a type, e.g.:
Video[] videoArray = gson.fromJson(json, Video[].class);
This way you avoid all the hassle with the Type object, and if you really need a list you can always convert the array to a list, e.g.:
List<Video> videoList = Arrays.asList(videoArray);
IMHO this is much more readable.
In Kotlin this looks like this:
Gson().fromJson(jsonString, Array<Video>::class.java)
To convert this array into List, just use .toList()
method
Solution 3:
I recomend this one-liner
List<Video> videos = Arrays.asList(new Gson().fromJson(json, Video[].class));
Warning: the list of videos
, returned by Arrays.asList
is immutable - you can't insert new values. If you need to modify it, wrap in new ArrayList<>(...)
.
Reference:
- Method Arrays#asList
- Constructor Gson
- Method Gson#fromJson (source
json
may be of typeJsonElement
,Reader
, orString
) - Interface List
- JLS - Arrays
- JLS - Generic Interfaces