Java 当字段名以点开头时,将Json转换为对象
我正在尝试使用Gson从JsonElement转换为Object。 问题是JsonObject有两个字段,名称以点开头,当我使用gson.fromJson方法时,这些字段没有映射 这是Json对象(令牌对象): 这是目标类:Java 当字段名以点开头时,将Json转换为对象,java,android,json,eclipse,gson,Java,Android,Json,Eclipse,Gson,我正在尝试使用Gson从JsonElement转换为Object。 问题是JsonObject有两个字段,名称以点开头,当我使用gson.fromJson方法时,这些字段没有映射 这是Json对象(令牌对象): 这是目标类: private class BearerToken{ public String access_token; public String token_type; public String expires_in;
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"}
令牌:
{"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始终为空
有什么想法吗?
谢谢。在相应字段上设置相应的
@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();
基本上,使用
@SerializedName
。这是一个不同的问题。对于我的情况,上述问题的答案不起作用。请重新打开问题以获得新答案。谢谢你试着把@SerializedName(“.expires”)
放进去,但没有用?问题显然与你提到的不同。答案可能有用或不有用,但问题不是重复的,是不同的,可以为那些有相同问题的人服务,我可以更快地找到答案。我不是Stackoverflow的新用户,在询问之前先进行了检查,不容易找到问题的答案。您的问题和链接的问题,无论标题如何,都是关于如何为字段设置自定义名称。如果你有另外一个问题,请考虑澄清。谢谢。我试过了,但抛出了这个JsonSyntaxException:java.text.ParseException:Unparseable日期:“2014年9月30日星期二17:47:14 GMT”。com.google.gson.JsonSyntaxException:2014年9月30日星期二17:55:30 GMT我不知道什么是正确的DateFormat@Gonzalo您可能需要将不同的默认语言环境设置设置为一些英语值Tue
和Sep
是英文术语。@Gonzalo您使用的是哪个Gson版本?默认情况下,它似乎使用Locale.US
。.NET Rest服务返回“2014年9月30日星期二17:47:14 GMT”。我用的是gson-2.2.4。如何为我的Android应用程序设置不同的默认区域设置?@Gonzalo该日期字符串在本地工作。您可能需要检查Android的SimpleDataFormat
是否有任何差异。您可以使用Locale.setDefault(..)
更改默认的Locale
。