我有一个像这样的Json文件
{Users:[{
user1 :{
email: "sth"
phone : "sth"
}},
user2:{
email:"sth"
phone:"sth"
}]}
以上是只读文件。我使用以下代码:
BufferedReader br = new BufferedReader(fileReader);
Myclass myclass= gson.fromJson(br, Myclass.class);
所以我可以使用我的课程获得电子邮件和电话的价值。但我也想要用户名。 即user1电子邮件电话 user2电子邮件电话
答案 0 :(得分:0)
将用户名作为另一个属性,如:
{Users:[{ name: "user1", email: "sth", phone : "sth" }, {name: "user2", email:"sth", phone:"sth"}]}
要提供更多详细信息,如果您可以向我们展示Myclass,它会有所帮助,但它看起来应该是这样的:
public class Myclass [
private List<User> Users;
public List<User> getUsers() {
return Users;
}
public void setUsers(List<User> Users) {
this.Users = Users;
}
}
和
public class User {
private String email;
private String name;
private String phone;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
}
这适用于您的代码。
答案 1 :(得分:0)
如果您无法修改json,那么您可能必须编写自己的反序列化程序。像这样:
public class UserDeserializer implements JsonDeserializer<User> {
@Override
public User deserialize(JsonElement jsonElement, Type typeOfT, JsonDeserializationContext context) {
Map.Entry<String, User> userAndName = jsonElement.getAsJsonObject().entrySet().iterator().next();
String name = userAndName.getKey();
JsonObject userInfo = userAndName.getValue().getAsJsonObject();
String email = userInfo.get("email").getAsString();
String phone = userInfo.get("phone").getAsString();
return new User(name, email, phone);
}
}
然后在创建gson实例时注册反序列化器:
Gson gson = new GsonBuilder()
.registerTypeAdapter(User.class, new UserDeserializer())
.create();