如何在Gson / Json中获取对象标识符的名称?

时间:2013-01-08 14:42:14

标签: java json gson

我有一个像这样的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电子邮件电话

2 个答案:

答案 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();