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

そのため、クラスを使用して email と phone の値を取得できます。しかし、ユーザー名も必要です。つまり、user1 の電子メール 電話 user2 の電子メール 電話

4

2 に答える 2

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 に答える
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 に答える