0

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

4

2 回答 2

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;
    }
}

这将适用于您的代码。

于 2013-01-08T14:45:41.997 回答
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();
于 2013-01-10T15:14:21.277 回答