使用嵌套 类 映射 Json 字符串

Mapping Json String with Nested Classes

我从 MongoDB 中提取了以下 JSON 字符串:

{ "_id" : { "$oid" : "552645a5d3d57a6fc594c3c6"} , "name" : "mark" , 
"Info" : { "age" : 18 , "email" : "mark@gmail.com" , "phone" : "321-456-778"}}

我正在尝试将上面的 JSON 映射到下面的 class:

public class User {

    String name;
    Info info;

    // Getters/Setters
    public User(String name, int age, String email, String phone) {
        this.name = name;
        this.info = new Info(age, email, phone);
    }


    static class Info{

        public Info(int age, String email, String phone) {
            super();
            this.email = email;
            this.phone = phone;
            this.age = age;
        }

        public Info( ) {
        }

        String email;
        String phone;
        int age;
        // Getters/Setters

    }
}

通过使用GsonfromJson方法:

Gson gson = new Gson();
User u = gson.fromJson(jsonString, User.class);

生成的 User 附加了一个空值 Info。知道如何解决吗?

问题出在Json。实际上这个Json是遵循混合命名策略。

"info" 对象采用驼色大小写,其他对象采用小大小写。 这就是为什么gson很难将其转换为Object。

如果您可以将所有键转换为更低的键,那么您的代码就可以正常工作。 如果您希望所有的密钥都采用驼峰式大小写,那么您可以使用 GsonBuilder 来配置命名策略。

例如:

GsonBuilder builder=new GsonBuilder();

builder.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE);

Gson g=builder.create();

但对于您的情况,一个简单的解决方法是将信息对象转换为小写,即您转换后的 json 将是:

{ "_id" : { "$oid" : "552645a5d3d57a6fc594c3c6"} , "name" : "mark" , 
"info" : { "age" : 18 , "email" : "mark@gmail.com" , "phone" : "321-456-778"}}