如何将JSON反序列化为具有HashMap属性的对象?

时间:2016-06-28 12:48:36

标签: java json

现在我正在使用Gson将JSON反序列化为Object。

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

2 个答案:

答案 0 :(得分:0)

对于您预期的结果,JSON数据应该类似于以下格式,

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

答案 1 :(得分:0)

您收到此错误,因为文本字段是序列化为字符串的JSON映射。如果它是一个实际的数据,而不仅仅是一个示例,您可以使用@JsonDeserialize注释一个字段并编写自己的自定义JsonDeserializer<HashMap<String,String>>,这将进行2次反序列化。