

Google CGI API for Japanese
Inputで返ってくるjsonをGsonを使って解析したいのですが、解析結果の格納用にどのようなJavaのクラスを作ればいいのか分かりません。  
パースする方法をご存知の方がいらっしゃいましたらご教授いただけると幸いです。

Google CGI API for Japanese Inputで得られるjsonが次のようなものです：

[code]

    [
      ["ここでは",
        ["ここでは", "個々では", "此処では"]
      ],
      ["きものを",
        ["着物を", "きものを", "キモノを"]
      ],
      ["ぬぐ",
        ["脱ぐ", "ぬぐ", "ヌグ"]
      ]
    ]
    
[/code]


CC BY-SA 3.0
2017-04-01T16:44:42.460
33699
2019-07-18T11:02:00.517
question
java json
GsonでGoogle CGI API for Japanese Inputの結果をパースしたい


JsonDeserializerを使えば、自分でパースすることができます。

[code]

    class Response {
        String keyword;
        String[] results;
    
        public Response(String keyword, String[] results) {
            this.keyword = keyword;
            this.results = results;
        }
    }
    
    class ResponseDeserializer implements JsonDeserializer<Response> {
    
        @Override
        public Response deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
                throws JsonParseException {
            JsonArray jsonArray = json.getAsJsonArray();
    
            String keyword = jsonArray.get(0).getAsString();
            String[] results = new Gson().fromJson(jsonArray.get(1), String[].class);
    
            return new Response(keyword, results);
        }
    }
    
[/code]

こんな感じで定義しておいて、使うときに以下のように書きます。

[code]

        Gson gson = new GsonBuilder()
                .registerTypeAdapter(Response.class, new ResponseDeserializer())
                .create();
        Response[] responses = gson.fromJson(json, Response[].class);
    
[/code]

* * *

逆にJsonに戻したい場合はJsonSerializerを作れば良いでしょう。

[code]

    class ResponseSerializer implements JsonSerializer<Response> {
    
        @Override
        public JsonElement serialize(final Response src, Type typeOfSrc, JsonSerializationContext context) {
            JsonArray array = new JsonArray();
            array.add(src.keyword);
    
            JsonArray results = new JsonArray();
            for (String result : src.results) {
                results.add(result);
            }
            array.add(results);
    
            return array;
        }
    }
    
[/code]

使うときは、以下のように。

[code]

        Gson gson = new GsonBuilder()
                .registerTypeAdapter(Response.class, new ResponseDeserializer())
                .registerTypeAdapter(Response.class, new ResponseSerializer())
                .create();
        Response[] responses = gson.fromJson(json, Response[].class);
    
        System.out.println(gson.toJson(responses));
    
[/code]

output:

[code]

    [["ここでは",["ここでは","個々では","此処では"]],["きものを",["着物を","きものを","キモノを"]],["ぬぐ",["脱ぐ","ぬぐ","ヌグ"]]]
    
[/code]


CC BY-SA 3.0
2017-04-02T03:14:37.880
33706
2017-04-02T03:14:37.880
7655
33699
answer