使用嵌套 类 映射 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
}
}
通过使用Gson
的fromJson
方法:
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"}}
我从 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
}
}
通过使用Gson
的fromJson
方法:
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"}}