2016-06-28 8 views
1

今はGsonを使用してJSONをObjectに逆シリアル化しています。JSONをHashMap属性のオブジェクトに逆シリアル化するにはどうすればよいですか?

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

[ 
    { 
     "hash":"c8b2ce0aacede58da5d2b82225efb3b7", 
     "instanceid":"aa49882f-4534-4add-998c-09af078595d1", 
     "text":"{\"C_FirstName\":\"\",\"ContactID\":\"2776967\",\"C_LastName\":\"\"}", 
     "queueDate":"2016-06-28T01:03:36" 
    } 
] 

そして、私のエンティティオブジェクトは、次のようになります。

public class AppCldFrmContact { 
    public String hash; 
    public String instanceid; 
    public HashMap<String,String> text; 
    public String queueDate; 
} 

textStringデータ型だった場合、すべてが正常になります。しかし、私は自分が望むように異なるフィールドにアクセスすることはできません。

与えられたJSONをオブジェクトに変換する方法はありますか?

エラーは次のとおりです。Expected BEGIN_OBJECT but was STRING at line 1 column 174これは解析できない場合はわかります。

解析を行うコード:あなたのために

Type listType = new TypeToken<List<AppCldFrmContact>>() { 
     }.getType(); 
List<AppCldFrmContact> contacts = gson.fromJson(response.body, listType); 
+1

「text」フィールドは、JSONオブジェクトではなくJSONオブジェクトを含むStringです。 – Robert

+0

JSONオブジェクトの場合、どのように見えますか?それから、与えられたJSONを、私が望むオブジェクトに構文解析する方法はありますか? –

答えて

0

テキストフィールドがJSONマップシリアル化されるため、このエラーを取得しています文字列に実際のデータであり、例ではない場合は、フィールドに@JsonDeserializeと注釈を付けて、JsonDeserializer<HashMap<String,String>>という独自のカスタム値を書きます。これにより、逆シリアル化が2回行われます。

0

が結果を予想、JSONデータをフォーマット以下のようにする必要があり、

[ 
    { 
     "hash":"c8b2ce0aacede58da5d2b82225efb3b7", 
     "instanceid":"aa49882f-4534-4add-998c-09af078595d1", 
     "text":{"C_FirstName":"","ContactID":"2776967","C_LastName":""}, 
     "queueDate":"2016-06-28T01:03:36" 
    } 
] 
関連する問題