2017-04-12 1 views
0

ユーザーのリストを含むUserRequestクラスのコード。名前なしのGSONシリアル化プレーン配列

public class UserRequest { 
    private List<User> userList; 

    public UserRequest() { 
    } 

    public UserRequest(List<User> userList) { 
     this.userList = userList; 
    } 

    public List<User> getUserList() { 
     return this.userList; 
    } 

    public void setUserList(List<User> userList) { 
     this.userList = userList; 
    } 

} 

ユーザーのID、姓と名が含まれているユーザークラスのコード、。

public class User { 

    private String id; 
    private String firstName; 
    private String lastName; 

    public User() { 
    } 

    public User(String id, String firstName, String lastName) { 
     this.id = id; 
     this.firstName = firstName; 
     this.lastName = lastName; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
} 

私はGSONライブラリを使用していますし、私がいる問題は、JSONにJavaオブジェクトからシリアライズするときは、私はそれがために必要な方法でフォーマットされていない私のJSON要求ということです。

望ましい現状のフォーマット

{"userList":[{"id":"12341234", "firstName": "Joeri", "lastName": "Verlooy"}]} 

形式:

[{"id":"12341234", "firstName": "Joeri", "lastName": "Verlooy"}] 

私は任意の名前なしでJSONオブジェクトのプレーンな配列を送ることができる方法はありますか?

+1

が重複する可能性がありますあなたのユーザーのリストと、ここで jsonArrayでしょうか? (ジェネリック型)](http://stackoverflow.com/questions/5554217/google-gson-deserialize-listclass-object-generic-type) –

+0

@LyubomyrShayDarivシリアル化に問題があります。逆シリアル化ではありません。 –

+0

@JoeriVerlooy Not問題:https://google.github.io/gson/apidocs/com/google/gson/Gson.html#toJson-java.lang.Object-java.lang.reflect.Type-とそのオーバーロード。 –

答えて

1

は、あなたがどこによカスタムTypeAdapterを使用する必要がGsonライブラリを使用して、「カスタム」JSONを解析するには名前のない配列からUsersオブジェクトのリストを作成することができます。 Here TypeAdapterの使用例があります。デシリアライズリスト オブジェクト -

+0

あなたの返答をありがとう、私は記事を調べます。 –

+1

私は自分のプロジェクトでカスタムタイプのアダプターを使用します。 [こちら](https://github.com/ostojan/360toOne/blob/master/AndroidApp/app/src/main/java/com/ostojan/x360/model/GameTypeAdapter.java)と[ここ](https:///github.com/ostojan/360toOne/blob/master/AndroidApp/app/src/main/java/com/ostojan/x360/model/RegionTypeAdapter.java)私の実装を見つけることができます。 – ostojan

+0

私は、OPがオーバーキルホイールを再現しなければならないとは思わない:OPはリクエストオブジェクトからリストを取得し、それをJSON表現に変換するだけのようだ。 –

1

アイテム(ユーザー)のモデルを作成し、jsonをJavaのArrayListに変換しようとします。 JSON文字列がstrJsonであると仮定し、その後、あなたは以下のようにそれを行うことができます。

あなたが実際にいけない
ArrayList<User> lstItems = (new Gson()).fromJson(strJson, new TypeToken<ArrayList<User>>() {}.getType()); 

は任意の名前を持っているdoesntのリストcuzを、ユーザのリスト(UserRequest)のためのモデルを必要とします。

あなたが名前のないリストを含むJSONにオブジェクトを変換したい場合は

は、以下のように実行します。

ArrayList<User> lstUser = new ArrayList<User>(); 
lstUser.add(new User()); 
(new Gson()).toJson(lstUser, new TypeToken<ArrayList<User>>() {}.getType()); 
+0

シリアル化ではなく非シリアル化のためにこれはありませんか? Javaオブジェクトからjsonを作成したいが、それ以外の方法では作成したくない。 –

+0

あなたがシリアル化したいのであれば、ユーザーモデルのarraylistでそれを行うだけです。名前のない配列に変更されます。 –

+0

'toJson'のほうが、より正確で、' fromJson'のほうの方が良い例になっています。 –

1
JSONArray jsonArray = new JSONArray(); 
for (int i=0;i<userList.size();i++) { 
    jsonArray.add(userList.get(i)); 
} 

USERLISTは望ましい形式に[GoogleのGsonの

+0

あなたはそれを確認しましたか?それは動作しません:no [JsonArray overload](https://static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/gson/JsonArray.html#t2)はOPの'User'クラスのインスタンスです。 –

関連する問題