Deserializing a Map field with Gson

前端 未结 1 1885
后悔当初
后悔当初 2020-12-10 11:55

I have a User object with this structure:

class User {
    private String id;
    private String name;
    private Map properties;

            


        
相关标签:
1条回答
  • 2020-12-10 12:32

    For me this code:

    public class Main {
        public static void main(String[] args) throws IOException {
        GsonBuilder builder = new GsonBuilder();
        builder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
        Gson gson = builder.create();
        FileInputStream inputStream = new FileInputStream(new File("bobi.json"));
        InputStreamReader reader = new InputStreamReader(inputStream);
        User user = gson.fromJson(reader, User.class);
        System.out.println(user.getName());
        System.out.println(user.getId());
        for (String property : user.getProperties().keySet()) {
            System.out.println("Key: " + property + " value: " + user.getProperties().get(property));
        }
        reader.close();
    }
    

    Prints this:

    azerty
    123456789
    Key: p1 value: 1.0
    Key: p2 value: test
    Key: p3 value: [1.0, 2.0, 3.0, 4.0]
    Key: p4 value: {}
    

    However, keep in mind that I have stripped the wrapping json object in the file I parse. The file is:

    {
            "id":"123456789",
            "name" : "azerty",
            "emailHash":"123456789", 
            "properties": {
                "p1":1,
                "p2":"test",
                "p3":[1, 2, 3, 4],
                "p4":{
    
                }
            }
    }
    

    Also I added closing double quote for name and id, which you did not have in your sample.

    The User class as requested by the OP. I have added getters and setters for the reason of printing:

    import java.util.Map;
    
    class User {
        private String id;
        private String name;
        private Map<String, Object> properties;
        public String getId() {
            return id;
        }
        public void setId(String id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public Map<String, Object> getProperties() {
            return properties;
        }
        public void setProperties(Map<String, Object> properties) {
            this.properties = properties;
        }
    }
    
    0 讨论(0)
提交回复
热议问题