【问题标题】:Convert Json to Object when field name begin with a dot当字段名称以点开头时将 Json 转换为 Object
【发布时间】:2014-09-30 16:15:23
【问题描述】:

我正在尝试使用 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"}

令牌:

.expires.issued 字段始终为 null

有什么想法吗? 谢谢。

【问题讨论】:

  • 基本上,使用@SerializedName
  • 这是一个不同的问题。所指出问题的答案在我的情况下不起作用。请重新打开问题以接收新答案。谢谢
  • 您尝试输入@SerializedName(".expires"),但没有成功?
  • 这个问题显然与你提到的不同。答案或许可以服务,也可以不服务,但问题不是重复的,是不同的,可以服务于有相同问题的人我,更快地找到答案。我不是 Stackoverflow 的新用户,在询问之前先检查过,并没有轻易找到我的问题的答案。
  • 您的问题和链接的问题,无论其标题如何,都是关于如何为字段设置自定义名称。如果您还有其他问题,请考虑澄清。

标签: java android json eclipse gson


【解决方案1】:

在适当的字段上设置适当的@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();

【讨论】:

  • 谢谢。我试过了,但是抛出了这个 JsonSyntaxException: java.text.ParseException: Unparseable date: "Tue, 30 Sep 2014 17:47:14 GMT"。 com.google.gson.JsonSyntaxException: Tue, 30 Sep 2014 17:55:30 GMT 我不知道什么是正确的 DateFormat
  • @Gonzalo 您可能需要将不同的默认 Locale 设置为某个英文值。 TueSep 是英文术语。
  • @Gonzalo 您使用的是哪个 Gson 版本?好像默认使用Locale.US
  • “2014 年 9 月 30 日星期二 17:47:14 GMT”从 .NET Rest 服务返回。我正在使用 gson-2.2.4。如何为我的 Android 应用设置不同的默认语言环境?
  • @Gonzalo 该日期字符串在本地工作。您可能想检查 Android 的 SimpleDateFormat 是否有任何差异。您可以将默认的Locale 更改为Locale.setDefault(..)
猜你喜欢
  • 2021-12-19
  • 1970-01-01
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
相关资源
最近更新 更多