Search code examples
javajsongsonjson-deserialization

Get JSON key name using GSON


I have a JSON array which contains objects such as this:

{
    "bjones": {
        "fname": "Betty",
        "lname": "Jones",
        "password": "ababab",
        "level": "manager"
    }
}

my User class has a username which would require the JSON object's key to be used. How would I get the key of my JSON object?

What I have now is getting everything and creating a new User object, but leaving the username null. Which is understandable because my JSON object does not contain a key/value pair for "username":"value".

Gson gson = new Gson();
JsonParser p = new JsonParser();
JsonReader file = new JsonReader(new FileReader(this.filename));
JsonObject result = p.parse(file).getAsJsonObject().getAsJsonObject("bjones");
User newUser = gson.fromJson(result, User.class);

// newUser.username = null
// newUser.fname = "Betty"
// newUser.lname = "Jones"
// newUser.password = "ababab"
// newUser.level = "manager"

edit: I'm trying to insert "bjones" into newUser.username with Gson, sorry for the lack of clarification


Solution

  • Use entrySet to get the keys. Loop through the entries and create a User for every key.

    JsonObject result = p.parse(file).getAsJsonObject();
    Set<Map.Entry<String, JsonElement>> entrySet = result.entrySet();
    for(Map.Entry<String, JsonElement> entry : entrySet) {
        User newUser = gson.fromJson(p.getAsJsonObject(entry.getKey()), User.class);
        newUser.username = entry.getKey();
        //code...
    }