jacksonマッパーを使用してJSONデータをJavaクラスにマップしようとしています。私のJSONデータは入れ子のない1つのフラットオブジェクトですが、のデータの一部を内部クラスにマップしたいと思います。jacksonマッパーを使用してJSONデータの一部をネストされたクラスにマップします。
以下のJSONデータを参照すると、security_name
とmarket_cap
フィールドはSecurity class
に直接マップされます。 しかし1_month_profit
、3_month_profit
、6_month_profit
フィールドは内部クラスにマッピングする必要があります - Profit class
(例えば1_month_profit
利益クラスのprivate Double oneMonthProfit
に
現在、私はJSONデータをデシリアライズするとき、私はのためのすべての正しいマッピングを持っています。親クラス(セキュリティ)の変数が、子クラス(利益)の変数はが割り当てられていない
デシリアライズされたデータのスナップショット:。
{
"security_name": "Apple",
"market_cap": 13,000,000,000,
"profit": {
"1_month_profit": null, // <-- not being assigned..
"3_month_profit": null, // <-- not being assigned..
"6_month_profit": null // <-- not being assigned..
},
...
}
次のよう
マイJSONデータは次のとおりです。次のように
{
"security_name": "Apple",
"market_cap": 13,000,000,000,
"1_month_profit": 1.2,
"3_month_profit": -2.0,
"6_month_profit": 3.0
...
}
Securityクラスは全体のJSONデータをマップ:
public class Security {
private String securityName;
private Integer marketCap;
private Profit profit = new Profit();
public String getSecurityName() {
return securityName;
}
@JsonProperty("security_name")
public void setSecurityName(String securityName) {
this.securityName = securityName;
}
public Integer getMarketCap() {
return marketCap;
}
@JsonProperty("market_cap")
public void setMarketCap(String marketCap) {
this.marketCap= marketCap;
}
@JsonProperty("profit")
public Profit getProfit() {
return profit;
}
public class Profit {
private Double oneMonthProfit;
private Double threeMonthProfit;
private Double sixMonthProfit;
public Double getOneMonthProfit() {
return oneMonthProfit;
}
@JsonProperty("1_month_profit") // <-- this has no effect.
public void setOneMonthProfit(Double oneMonthProfit) {
this.oneMonthProfit = oneMonthProfit;
}
public Double getThreeMonthProfit() {
return threeMonthProfit;
}
@JsonProperty("3_month_profit")
public void setThreeMonthProfit(Double threeMonthProfit) {
this.threeMonthProfit = threeMonthProfit;
}
public Double getSixMonthProfit() {
return sixMonthProfit;
}
@JsonProperty("6_month_profit")
public void setSixMonthProfit(Double sixMonthProfit) {
this.sixMonthProfit = sixMonthProfit;
}
}
}
私は内部クラスで@JsonProperty
注釈を追加することであろうと期待していました残念ながら、これは何の効果もありませんでした。
私はジャクソンマッパーを使ってこれを行う方法が必要なように感じますが、これを達成する方法を見つけることができませんでした..あなたの助けが大いに評価されるでしょう!少し早いですがお礼を。
問題を詳しく説明できますか。この構造体が正しく見える –
現在の構造体で逆シリアル化されたデータの結果(上記)を見ると、 "profit"フィールドのネストされたフィールドにはnull値があります。利益の中のすべてのフィールドの値をマップできるようにしたいと思います。 –
次の回答を参照し、データを適切にマップします –