使用嵌套类映射Json字符串

时间:2015-04-09 10:07:48

标签: java gson

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

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

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

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

    }
}

使用fromJson的{​​{1}}方法:

Gson

结果Gson gson = new Gson(); User u = gson.fromJson(jsonString, User.class); 附加了一个空User。知道怎么解决吗?

1 个答案:

答案 0 :(得分:1)

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

" info"对象即将进入骆驼案,而其他人则是小案。 这就是为什么gson很难将其转换为Object。

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

例如:

GsonBuilder builder=new GsonBuilder();

builder.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE);

Gson g=builder.create();

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

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