[解決済み] gson は MalformedJsonException をスローします。
2022-02-04 17:48:18
質問
を使っています。 gson を変換するために json の文字列をJava-Objectに変換します。 の値は 結果2 の値とまったく同じである。 結果1 . (デバッガからコピー、バックスラッシュを追加)。
result1 の変換中に次のような例外が発生しました。 com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException.JsonSyntaxException: 1行目170列目でEOFが予想されます。
変換する 結果2 は問題なく動作します。
jsonlint.comによると、json文字列は有効です。
public static Userinfo getUserinfo()
{
String result1 = http.POST("https://www.bitstamp.net/api/balance/",
postdata, true);
String result2 = "{\"btc_reserved\": \"0\", \"fee\": \"0.5000\", \"btc_available\": \"0.10000000\", \"usd_reserved\": \"0\", \"btc_balance\": \"0.10000000\", \"usd_balance\": \"30.00\", \"usd_available\": \"30.00\"}";
Gson gson = new Gson();
Userinfo userinfo1 = gson.fromJson(result1, Userinfo.class); //throws Exception
Userinfo userinfo2 = gson.fromJson(result2, Userinfo.class); //works fine
return userinfo1;
}
private class Userinfo {
public Userinfo(){
}
public float usd_balance;
public float btc_balance ;
public float usd_reserved;
public float btc_reserved;
public float usd_available;
public float btc_available;
public float fee;
public float last_update;
}
解決方法は?
result1の末尾に、デバッガでは見えない文字があり、それがclosingの後に続いているのではないでしょうか。
}
文字があります。の長さはどれくらいですか?
result1
対
result2
? と記しておきます。
result2
のように、169文字になります。
GSON は、オブジェクトの末尾に空白でない余分な文字がある場合にこのようなエラーを投げます。
非常に
JSON仕様のように)狭い範囲でしか
\t
,
\n
,
\r
およびスペースは空白としてカウントされます。
特に、末尾のNUL(
\0
) 文字はホワイトスペースとしてカウントされないので、このエラーを引き起こします。
.
もし、最後の余分な文字の原因を突き止め、それを取り除くことが難しい場合は、GSONにlenient modeでパースするように指示するのも一つの方法です。
Gson gson = new Gson();
JsonReader reader = new JsonReader(new StringReader(result1));
reader.setLenient(true);
Userinfo userinfo1 = gson.fromJson(reader, Userinfo.class);
関連
-
[解決済み] メソッドがスーパータイプのメソッドをオーバーライドまたは実装していない - Overrideの場合
-
[解決済み】メソッド本体がない、またはJavaで抽象的な宣言をする
-
[解決済み】接続Java - MySQL : 公開鍵の取得は許可されていません。
-
[解決済み] GSONが "Expected BEGIN_OBJECT but was BEGIN_ARRAY "と投げる?
-
[解決済み] GsonでList<T>オブジェクトをデシリアライズする?
-
[解決済み】Gsonを使用してJSONをHashMapに変換するにはどうすればよいですか?
-
[解決済み】Gson - Jsonから型付きArrayList<T>に変換する。
-
[解決済み】GSON - 日付形式
-
[解決済み】Gson: StringをJsonObjectに直接変換する(POJOなし)
-
[解決済み] Gson for Javaによる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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
-
[解決済み】Android java.lang.IllegalStateException: Android java.lang.IllegalStateException: Could not execute method of the activity
-
[解決済み】指定された子にはすでに親がいます。先に子の親に対してremoveView()を呼び出す必要がある(Android)
-
[解決済み】JLabelのテキストを中央に配置するには?
-
[解決済み】Javaでユーザー入力を待機させる方法
-
[解決済み】Javaで文字列をコピーするにはどうしたらいいですか?
-
[解決済み】スレッド "main "での例外 java.util.NoSuchElementException
-
[解決済み】純粋なJUnitテストにVisibleForTestingを使用する方法
-
[解決済み】Javaの".class expected "について