JSON文字列があります:
{
"fruit": {
"weight":"29.01",
"texture":null
},
"status":"ok"
}
...私はPOJOにマップしようとしています:
public class Widget {
private double weight; // same as the weight item above
private String texture; // same as the texture item above
// Getters and setters for both properties
}
上記の文字列 (マップしようとしているもの) は、実際にはorg.json.JSONObject内に含まれており、そのオブジェクトのtoString()
メソッドを呼び出すことで取得できます。
Jackson JSONオブジェクト/JSON マッピング フレームワークを使用してこのマッピングを行いたいと考えています。これまでのところ、これが私の最善の試みです。
try {
// Contains the above string
JSONObject jsonObj = getJSONObject();
ObjectMapper mapper = new ObjectMapper();
Widget w = mapper.readValue(jsonObj.toString(), Widget.class);
System.out.println("w.weight = " + w.getWeight());
} catch(Throwable throwable) {
System.out.println(throwable.getMessage());
}
readValue(...)
残念ながら、Jacksonメソッドが実行されると、このコードは例外をスローします。
Unrecognized field "fruit" (class org.me.myapp.Widget), not marked as ignorable (2 known properties: , "weight", "texture"])
at [Source: java.io.StringReader@26c623af; line: 1, column: 14] (through reference chain: org.me.myapp.Widget["fruit"])
次のマッパーが必要です。
- 外側の中括弧 ("
{
" と "}
") を完全に無視する fruit
を に変更Widget
status
丸ごと無視
これを行う唯一の方法がJSONObject
のtoString()
メソッドを呼び出すことである場合は、それでかまいません。しかし、Jackson には、Java JSON ライブラリで既に動作する「箱から出してすぐに使える」ものが付属しているのだろうか?
いずれにせよ、Jackson マッパーを作成することが私の主な問題です。誰かが私が間違っている場所を見つけることができますか? 前もって感謝します。