web-dev-qa-db-ja.com

JSON GSON.fromJson Javaオブジェクト

クラスにJsonをロードしようとしています

public User() {
    this.fbId = 0;
    this.email = "";
    this.name = "";
    this.thumb = "";
    this.gender = "";
    this.location = "";
    this.relationship = null;
    this.friends = new ArrayList();
}
{
    users:{
        user:{
            name:'the name',
            email:'[email protected]',
            friends:{
                user:{
                    name:'another name',
                    email:'[email protected]',
                    friends:{
                        user:{
                            name:'yet another name',
                            email:'[email protected]'
                        }
                    }
                }
            }
        }
    }
}

GSONにユーザーの詳細を上記のJavaオブジェクトに次のコードでロードさせるようにするのに苦労しています

User user = gson.fromJson(this.json, User.class);
22
Deviland

JSONは無効です。コレクションは{}で表されません。 オブジェクトを表します。コレクション/配列は、[]でコンマ区切りのオブジェクトを使用して表されます。

JSONは次のようになります。

{
    users:[{
        name: "name1",
        email: "email1",
        friends:[{
            name: "name2",
            email: "email2",
            friends:[{
                name: "name3",
                email: "email3"
            },
            {
                name: "name4",
                email: "email4"
            }]
        }]
    }]
}

(コレクションに複数のオブジェクトを指定する方法を理解できるように、ネストされた最も深い友人にもう1人の友人を追加したことに注意してください)

このJSONを考えると、ラッパークラスは次のようになります。

public class Data {
    private List<User> users;
    // +getters/setters
}

public class User {
    private String name;
    private String email;
    private List<User> friends;
    // +getters/setters
}

そして、それを変換するには、使用します

Data data = gson.fromJson(this.json, Data.class);

ユーザーを取得するには

List<User> users = data.getUsers();
35
BalusC