2016-06-28 117 views
1

现在我正在使用Gson将JSON反序列化为对象。如何将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对象的字符串! – 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" 
    } 
] 
相关问题