1

GSON 2.2.2を(初めて)使用して、JSONをJavaPOJOにマップしようとしています。サードパーティのRESTfulWebサービスにアクセスしています。これは、返される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":を出力するだけです。

// Hit the 3rd party service and get the JSON (example above).
JSONObject json = hitRestfulWebService();

Gson gson = new Gson();

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

System.out.println(job.getSourceBody());

私の唯一の推測は、GSONが3つのJSONフィールドを私の3つJobのプロパティにマップする方法を理解できないということです。誰かがこのマッピングが何である必要があるかを理解するのを手伝ってもらえますか?前もって感謝します。

4

3 に答える 3

3

アノテーションを使用して、どのjsonフィールドがどのオブジェクトメンバーにマップされるかを定義できます。例:

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

   @SerializedName("header-src")
   String myString2;
...
于 2013-02-07T15:52:24.380 に答える
1

responseではなくresponse.jobを使用します

いいえ

  {   "response": {..

使用する

 { "eva": ..

これは役立つかもしれません。

    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());
于 2013-02-07T15:20:41.780 に答える
1
public class Response{
  private Job job;

  //generate setter and getter
}

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
}

今Gsonに

JSONObject json = hitRestfulWebService();

Gson gson = new Gson();

// json.toString = "{response":{"job":{ ..."
Job job = gson.fromJson(json.toString(), Response.class);
于 2013-02-07T15:46:39.700 に答える