[解決済み] Jackson Jsonのパースエラー
質問
こんにちは、私はいくつかのレガシーコードで作業しており、JSONモデルの構造が少し変更されました。 オリジナルモデル
{
"values": {
"business": {
"default": 5.2
},
"personal": {
"charity": 0.728,
"medical": 1.222,
"moving": 1.222
}
}
}
新しい Model は次のようなものです。
{
"_values": {
"business": {
"purpose": {
"default": 5.2
},
"vehicle": {
"automobile": 0.0,
"bicycle": 0.0,
"motorcycle": 0.0
}
},
"personal": {
"purpose": {
"charity": 0.7280000000000001,
"medical": 1.222,
"moving": 1.222
}
}
}
}
そこで、私たちはfastxml.jacksonを使っているのですが、私はとても初心者なので、何度か別の方法を試してみたところ、エラーメッセージが表示され続けました。
com.fasterxml.jackson.databind.JsonMappingException.JsonMappingException: START_OBJECT トークンから double のインスタンスをデシリアライズできません。 at [Source: java.io.InputStreamReader@6b8b2b1; line: 42, column: 11] (through reference chain: >service.api.types.Drive_Json["_values"]->service.api.types.PotentialValues["business"]->java.util.HashMap["purpose"])...
私は、以下のアノテーションを使用して、Jsonファイル内のマッピングを抽出しています。
@JsonProperty("values")
private values values;
@JsonIgnoreProperties(ignoreUnknown = true)
public class values {
public HashMap<String, Double> purpose;
public HashMap<String, Double> personal;
}
現在の既存の値ファイルは、"personal" と "business" の値を保持する2つのハッシュマップを持ち、説明のないバインドでモデルを取得してそれぞれのハッシュマップに格納します。
私は私のjsonファイルのJsonPropertyフィールドを"_value"として変更し、値クラスファイルを変更しようとしたが、私はマッピングエラーが発生し続けることができます誰もが私が値クラスのための正しいモデルを作成する際に助けてください。 私はそれぞれのハッシュマップを試してみましたが、私はそれらをどのようにマッピングするのかよくわかりません。
@JsonProperty("_values")
private values Values;
@JsonIgnoreProperties(ignoreUnknown = true)
public class values {
public HashMap<String, Double> business_purpose;
public HashMap<String, Double> business_vehicle;
public HashMap<String, Double> personal_purpose;
};
解決方法は?
JSONをJavaオブジェクトにパースするには、いくつかの異なるアプローチを取ることができます。以下にそのうちの2つを紹介します(ただし、他にも考慮できることはたくさんあることに注意してください)。
アプローチ1
を使用する必要があります。
@JsonProperty("_values")
の代わりに
@JsonProperty("values")
を新しいJSONに合わせます。そのため、モデルクラスは以下のようになります。
@JsonIgnoreProperties(ignoreUnknown = true)
public class Values {
private Map<String, Object> business;
private Map<String, Object> personal;
// Getters and setters omitted
}
public class Data {
@JsonProperty("_values")
private Values values;
// Getters and setters omitted
}
パースするには
String json = "{\"_values\":{\"business\":{\"purpose\":{\"default\":5.2},\"vehicle\":"
+ "{\"automobile\":0.0,\"bicycle\":0.0,\"motorcycle\":0.0}},\"personal\":"
+ "{\"purpose\":{\"charity\":0.728,\"medical\":1.222,\"moving\":1.222}}}}";
ObjectMapper mapper = new ObjectMapper();
Data data = mapper.readValue(json, Data.class);
アプローチ2
別の方法として、JSON文字列をパースして
Map<String, Object>
. 次のような行で実現できます。
String json = "{\"_values\":{\"business\":{\"purpose\":{\"default\":5.2},\"vehicle\":"
+ "{\"automobile\":0.0,\"bicycle\":0.0,\"motorcycle\":0.0}},\"personal\":"
+ "{\"purpose\":{\"charity\":0.728,\"medical\":1.222,\"moving\":1.222}}}}";
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> values = mapper.readValue(json,
new TypeReference<HashMap<String, Object>>() {});
関連
-
[解決済み】このコンパイルユニットは名前付きモジュールに関連しているため、名前付きパッケージeclipseを宣言する必要があります。
-
[解決済み】javaで指定されたファイルが見つからない
-
[解決済み】Javaを包含するクラスではないのか?
-
[解決済み] 正しいJSONコンテンツタイプは何ですか?
-
[解決済み] JSONでコメントを使用することはできますか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JavaScriptでJSONをきれいに印刷する
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Android Studio クラス org.codehaus.groovy.runtime.InvokerHelper を初期化できませんでした。
-
[解決済み】imageio.IIOException: 入力ファイルが読み込めない
-
[解決済み】Javaの".class期待値"
-
[解決済み】Doubleはdereferencedできない?
-
[解決済み】HTTPステータス500 サーブレットクラスのインスタンス化エラー [重複]。
-
[解決済み】メソッド本体がない、またはJavaで抽象的な宣言をする
-
[解決済み】java 'jar'が内部コマンドまたは外部コマンドとして認識されない。
-
[解決済み】Hibernateの例外「failed to lazily initialize a collection of role」の解決方法
-
[解決済み】どういう意味か。Serializableクラスがstatic final serialVersionUIDフィールドを宣言していないとは?重複している] [重複している] [重複している] [重複している
-
[解決済み】接続Java - MySQL : 公開鍵の取得は許可されていません。