我从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
。知道怎么解决吗?
答案 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"}}