How to parse dynamic JSON fields with GSON?

24,509

According to GSON documentation you can do things like:

Type mapType = new TypeToken<Map<Integer, Result> >() {}.getType(); // define generic type
Map<Integer, Result> result= gson.fromJson(new InputStreamReader(source), mapType);

Or you can try to write custom serializer for your class.

Disclaimer: I too, have no experience with GSon but with other frameworks like Jackson.

Share:
24,509

Related videos on Youtube

Rob Riddle
Author by

Rob Riddle

Updated on January 29, 2021

Comments

  • Rob Riddle
    Rob Riddle over 3 years

    So I'm using GSON to parse JSON from an API and am stuck as to how to have it parse the dynamic fields in the data.

    Here is an example of the JSON data returned on a query:

    {
    
    -
    30655845: {
        id: "30655845"
        name: "testdata
        description: ""
        latitude: "38"
        longitude: "-122"
        altitude: "0"
        thumbnailURL: http://someimage.com/url.jpg
        distance: 9566.6344386665
    }
    -
    28688744: {
        id: "28688744"
        name: "testdata2"
        description: ""
        latitude: "38"
        longitude: "-122"
        altitude: "0"
        thumbnailURL: http://someimage.com/url.jpg
        distance: 9563.8328713012
    }
    }
    

    The way I am currently handling the single static values is with a class:

    import com.google.gson.annotations.SerializedName;
    
    public class Result 
    {
    @SerializedName("id")
    public int id;
    
    @SerializedName("name")
    public String name;
    
    @SerializedName("description")
    public String description;
    
    @SerializedName("latitude")
    public Double latitude;
    
    @SerializedName("longitude")
    public Double longitude;
    
    @SerializedName("altitude")
    public Double altitude;
    
    @SerializedName("thumbnailURL")
    public String thumbnailURL;
    
    @SerializedName("distance")
    public Double distance;
    }
    

    And then I can simply use GSON to parse that:

    Gson gson = new Gson();
    
    Reader reader = new InputStreamReader(source);
    
    Result response= gson.fromJson(reader, Result.class);
    

    I know this works on the sub-data as I can query and get a single entry and parse that quite easily, but what about the random integer values given for each value in the array? (ie the 30655845 and 2868874)

    Any help?

  • Sameers Javed
    Sameers Javed about 8 years
    Is there any way to parse the same but using NewtonSoft?