Java POJO属性的GSON映射空值

Java POJO属性的GSON映射空值,java,json,gson,Java,Json,Gson,我正在尝试使用GSON 2.2.2(这是第一次)将JSON映射到Java POJO中。我正在访问第三方RESTful web服务,这是我得到的JSON示例: { "response": { "job":{ "eta":-1, "status":"approved", "mt":1, "lc_tgt":"fr", "body_src":"Please tr

我正在尝试使用GSON 2.2.2(这是第一次)将JSON映射到Java POJO中。我正在访问第三方RESTful web服务,这是我得到的JSON示例:

{
    "response": {
        "job":{
            "eta":-1,
            "status":"approved",
            "mt":1,
            "lc_tgt":"fr",
            "body_src":"Please translated me.",
            "body_tgt":"S'il vous plaît traduire moi.",
            "unit_count":3,
            "tier":"machine",
            "credits":0,
            "ctime":"2013-02-07 14:56:12.391963",
            "lc_src":"en",
            "slug":"0",
            "job_id":"NULL"
        }
    },
    "opstat":"ok"
}
我试图将其映射到的POJO是:

public class Job {
    // correlates to "eta"
    private int eta;

    // correlates to "body_src"
    private String sourceBody;

    // correlates to "ctime"
    private java.util.Date creationTimestamp;

    // Getters and setters for all 3 properties
}
当我运行以下代码时,我没有得到任何异常,但print语句只打印“
null
”:


我唯一的猜测是,GSON不知道如何将3个JSON字段映射到我的3
Job
属性。有人能帮我弄清楚这个映射需要什么吗?提前感谢。

使用response.job,而不是response

不是

使用

这可能会有所帮助

    String a = "{\"response\": {\"job\":{\"eta\":-1,\"status\":\"approved\",\"mt\":1,\"lc_tgt\":\"fr\",\"body_src\":\"Please translated me.\",\"body_tgt\":\"S'il vous plaît traduire moi.\",\"unit_count\":3,\"tier\":\"machine\",\"credits\":0,\"ctime\":\"2013-02-07 14:56:12.391963\",\"lc_src\":\"en\",\"slug\":\"0\",\"job_id\":\"NULL\"}},\"opstat\":\"ok\"}";



    Job j = I.gson().fromJson(
            ((JsonObject) ((JsonObject) new JsonParser().parse(a)).get("response")).get("job"), Job.class);

    System.out.println(j.getEta());

使用response.job而不是response

不是

使用

这可能会有所帮助

    String a = "{\"response\": {\"job\":{\"eta\":-1,\"status\":\"approved\",\"mt\":1,\"lc_tgt\":\"fr\",\"body_src\":\"Please translated me.\",\"body_tgt\":\"S'il vous plaît traduire moi.\",\"unit_count\":3,\"tier\":\"machine\",\"credits\":0,\"ctime\":\"2013-02-07 14:56:12.391963\",\"lc_src\":\"en\",\"slug\":\"0\",\"job_id\":\"NULL\"}},\"opstat\":\"ok\"}";



    Job j = I.gson().fromJson(
            ((JsonObject) ((JsonObject) new JsonParser().parse(a)).get("response")).get("job"), Job.class);

    System.out.println(j.getEta());
现在在格森

JSONObject json = hitRestfulWebService();

Gson gson = new Gson();

// json.toString = "{response":{"job":{ ..."
Job job = gson.fromJson(json.toString(), Response.class);
现在在格森

JSONObject json = hitRestfulWebService();

Gson gson = new Gson();

// json.toString = "{response":{"job":{ ..."
Job job = gson.fromJson(json.toString(), Response.class);

您可以使用注释来定义将哪个json字段映射到哪个对象成员,例如:

class SomeClass
{
   @SerializedName("body-src")
   String myString1;

   @SerializedName("header-src")
   String myString2;
...

您可以使用注释来定义将哪个json字段映射到哪个对象成员,例如:

class SomeClass
{
   @SerializedName("body-src")
   String myString1;

   @SerializedName("header-src")
   String myString2;
...

谢谢@Ferhat(+1)-但是这不会改变任何事情。仍然得到
null
。想想看,GSON怎么知道
body\u src
应该映射到
sourceLanguage
?我认为这是问题的根源。好的,“响应”不映射任何对象。我编辑了我的回复。这可能会有帮助。”“a”是您的“响应”对象您可以使用注释来澄清它,查看我的评论。alex回答:)但您仍然必须
response.job
字段才能转换为POJO。我的itThanks@Ferhat(+1)代码——但是这不会改变任何事情。仍然得到
null
。想想看,GSON怎么知道
body\u src
应该映射到
sourceLanguage
?我认为这是问题的根源。好的,“响应”不映射任何对象。我编辑了我的回复。这可能会有帮助。”“a”是您的“响应”对象您可以使用注释来澄清它,查看我的评论。alex回答:)但您仍然必须
response.job
字段才能转换为POJO。我的代码
class SomeClass
{
   @SerializedName("body-src")
   String myString1;

   @SerializedName("header-src")
   String myString2;
...