当字段名称以点开头时,将Json转换为Object

时间:2014-09-30 16:15:24

标签: java android json eclipse gson

我尝试使用Gson从JsonElement转换为Object。 问题是JsonObject有两个字段,名称以点开头,当我使用 gson.fromJson 方法时,这些字段没有映射。

这是Json对象(一个标记对象):

{
   "access_token":"boQtj0SCGz2GFGz[...]",
   "token_type":"bearer",
   "expires_in":1209599,
   "userName":"gonzalo",
   ".issued":"Mon, 14 Oct 2014 06:53:32 GMT",
   ".expires":"Mon, 28 Oct 2014 06:53:32 GMT"
}

这是目标类:

private class BearerToken{
        public String access_token;
        public String token_type;
        public String expires_in;
        public String userName;
        public Date issued;
        public Date expires;

        public BearerToken(){
        }
    }

这是我的代码和结果:

 HttpResponse resp = httpClient.execute(post); // request to server
 String respStr = EntityUtils.toString(resp.getEntity()); // json token
 JsonParser parser = new JsonParser();
 sonElement jsonElement =  parser.parse(respStr);
 BearerToken token = new BearerToken();             
 Gson gson = new Gson();
 token = gson.fromJson(jsonElement, token.getClass());

respStr:

{"access_token":"d7NDuC7accTA[....]",
"token_type":"bearer",
"expires_in":1209599,
"userName":"43344",
".issued":"Tue, 30 Sep 2014 16:03:17 GMT",
".expires":"Tue, 14 Oct 2014 16:03:17 GMT"}

令牌:

enter image description here

字段 .expires .issued 始终为 null

有什么想法? 感谢。

1 个答案:

答案 0 :(得分:4)

在相应字段

上设置相应的@SerializedName
@SerializedName(".expires")
public Date expires;

你的问题是Gson不知道如何将JSON日期字符串反序列化为Date对象。

您必须添加适当的日期格式。

GsonBuilder builder = new GsonBuilder();
builder.setDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");     
Gson gson = builder.create();