Java+Jackson で json 文字列から object を生成する際、特定プロパティを文字列のままとしたい

投稿者: Anonymous Java+Jackson で json 文字列から object を生成する際、特定プロパティを 文字列のままとしたいのですが、そのようなことは可能でしょうか。 例えば String text = “{” + ” “key1”: “var1″, ” + ” “key2”: {“subkey1″:”subvar1”, “subkey2″:”subvar2″} ” + “}”; ObjectMapper mapper = new ObjectMapper(); Map<String, Object> json = (Map<String, Object>) mapper.readValue(text, Map.class); としたとき、 json.get(“key1”) → var1 という String を取得 json.get(“key2”) → {“subkey1″:”subvar1”, “subkey2″:”subvar2”} という String を取得 としたいのです。…(Continue Reading)

入れ子になったjson配列をjacksonのライブラリを使用してobjectに変換したい

投稿者: Anonymous 下記の様なjsonをjacksonのライブラリを使用してobjectに変換したいのです。 { “jsonrpc”: “2.0”, “result”:[ { “hostid”: “9999”, “name”: “test”, “type”: “1”, }, { “hostid”: “9998”, “name”: “test2”, “type”: “1”, } ], “id”: 1 } jacksonのreadValueメソッドを使用してobjectへ変換しようと試みておりますが、 TestDto test= mapper.readValue(json, TestDto.class); 下記のようなエラーとなってしまいます。 com.fasterxml.jackson.databind.JsonMappingException: No suitable constructor found for type [simple type, class TestDto$Result]: can not instantiate from JSON object (missing default constructor or creator,…(Continue Reading)

Jacksonで2つ以上の型を持つ配列をパースするには

投稿者: Anonymous JavaのJsonパーサJacksonを使って配列をパースするとき普通であれば。以下のようにレスポンスのモデルを作成し、readValuesを用いてパースできます。 ObjectMapper mapper = new ObjectMapper(); try{ ResponseClass response = mapper.readValue(response.toString(), ResponseClass.class); }(SomeException e){ } ————– //Model class class ResponseClass{ public List<SomeType> items; } ————– //Json response { [ { type:”TypeA”, name:”hoge” }, …….. しかし例えばこの配列の要素の型が複数ある場合はどうすればいいのでしょうか。例えば取得するJsonオブジェクトが以下のようなものの場合。 { [ { type:”typeA”, name:”hoge” }, { type:”typeB”, mail:”[email protected]” } ……. ] { この場合はObjectモデルのListのジェネリクスとフィールド名はどのようにすればいいのでしょう。 解決 JsonArrayに変換したあとで、for文を使ってその要素を調べて特定の要素がある場合で場合分けしてからJsonObjectにパースしました。 他にもいい方法があれば教えていただけると幸いです。 回答者:…(Continue Reading)