Gson deserialize to map

I have this json line that needs to be deserialized on the map: Map

"players_test": [
    {
        "54231f85f8e049c7bd8ac0aba3d1caf7": {
            "uuid": "54231f85f8e049c7bd8ac0aba3d1caf7",
            "name": "TomShar",
            "signup_time": "2014-07-04 16:27:16"
        }
    },
    {
        "54231f85f8e049c7bd8ac0aba3d1caf7": {
            "uuid": "54231f85f8e049c7bd8ac0aba3d1caf7",
            "name": "TomShar",
            "signup_time": "2014-07-04 16:27:16"
        }
    },
    {
        "54231f85f8e049c7bd8ac0aba3d1caf7": {
            "uuid": "54231f85f8e049c7bd8ac0aba3d1caf7",
            "name": "TomShar",
            "signup_time": "2014-07-04 16:27:16"
        }
    }
]

So strings should be keys, and then the value should be the object that it represents. I have a custom deseriaziler written for a UUID object that is verified and works (so this is not a problem).

EDIT:

I found a better JSON structure that I can use for my problem, which works exactly the way I want it.

"players": {
    "54231f85-f8e0-49c7-bd8a-c0aba3d1caf7": {
        "uuid": "54231f85-f8e0-49c7-bd8a-c0aba3d1caf7",
        "name": "TomShar",
        "kills": 0,
        "assists": 0,
        "damage_dealt": 0,
        "time_alive": 0,
        "dead": false
    },
    "KEY": {
        "uuid": "KEY",
        "name": "Name",
        "kills": 0,
        "assists": 0,
        "damage_dealt": 0,
        "time_alive": 0,
        "dead": false
    },
    "KEY": {
        "uuid": "KEY",
        "name": "Name",
        "kills": 0,
        "assists": 0,
        "damage_dealt": 0,
        "time_alive": 0,
        "dead": false
    }
}
+4
source share
1 answer

First insert the JSON string inside {...}, then you can easily convert it to a map, as shown below:

class PlayerObject {
    private String uuid;
    private String name;
    private String signup_time;
    // getters & setters
}

Gson gson = new Gson();
Type type = new TypeToken<Map<String, ArrayList<Map<String, PlayerObject>>>>(){}.getType();
Map<String, ArrayList<Map<String, PlayerObject>>> map = gson.fromJson(jsonString, type);

, : Map<String, PlayerObject> ?

, , :

Map<String,PlayerObject> players=new HashMap<String,PlayerObject>();
for(Map<String, PlayerObject> m:map.get("players_test")){
   for(String key:m.keySet()){
       players.put(key, m.get(key));
   }
}
System.out.println(new GsonBuilder().setPrettyPrinting().create().toJson(players));
+7

Source: https://habr.com/ru/post/1548528/


All Articles