おそらく、私はJsonからJavaオブジェクトをビルドする際に最も重要な点を見逃しています。私が得たJSONテキストはGson 2.8.2(非直列化)でJsonを解析する - なぜ文字列が数値であると考えられますか?
{
"batchcomplete": "",
"query": {
"pages": {
"736": {
"pageid": 736,
"ns": 0,
"title": "Albert Einstein",
"contentmodel": "wikitext",
"pagelanguage": "en",
"pagelanguagehtmlcode": "en",
"pagelanguagedir": "ltr",
"touched": "2017-11-01T06:51:29Z",
"lastrevid": 807175420,
"length": 144138
}
}
}
}
であると私は、対応するJavaオブジェクトは、だから私はGson
Gson g = new Gson();
WikiResponse r = g.fromJson(content.toString(), WikiResponse.class);
を使用して上記のJSONテキストをデシリアライズしようとしたクラス
public class WikiResponse {
String batchcomplete;
HashMap<String, HashMap<String, HashMap<Long, HashMap<String, String>>>> query;
public WikiResponse() {
batchcomplete = new String();
query = new HashMap<String, HashMap<String, HashMap<Long, HashMap<String, String>>>>();
}
}
によって記述されていると
このスタックトレースを取得します。
Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: For input string: "pageid"
at com.google.gson.internal.bind.TypeAdapters$11.read(TypeAdapters.java:305)
at com.google.gson.internal.bind.TypeAdapters$11.read(TypeAdapters.java:295)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:186)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:187)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)
at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:41)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:187)
at com.google.gson.internal.bind.MapTypeAdapterFactory$Adapter.read(MapTypeAdapterFactory.java:145)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:129)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:220)
at com.google.gson.Gson.fromJson(Gson.java:922)
at com.google.gson.Gson.fromJson(Gson.java:887)
at com.google.gson.Gson.fromJson(Gson.java:836)
at com.google.gson.Gson.fromJson(Gson.java:808)
at freedbimporter.rebuild.WikipediaQuery.main(WikipediaQuery.java:85)
Caused by: java.lang.NumberFormatException: For input string: "pageid"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at com.google.gson.stream.JsonReader.nextLong(JsonReader.java:964)
at com.google.gson.internal.bind.TypeAdapters$11.read(TypeAdapters.java:303)
... 17 more
なぜpageidは数字と見なされますか?私はそれをいくつかの文字列キーと宣言されると思った...
助けを非常に感謝します。
敬具
クリスチャン
'pageid'が' Long'と誤って解釈されているので、あなたのマップは1つの重複ネストレベルを持っているようです。 – yegodm