私のJSONです:JsonはHashMapを解析します<ArrayList<>> LibgdxでStackOverflowErrorを投げますか?
私は "json.fromJsonは" 正常に動作していると私は "json.toJson(ClassBの)" を呼び出すときに例外がスローされます、 "Libgdx" を使用{
"objects":{
"apple":[
{"x":3, "y":5},
{"x":6, "y":9}
],
"car":[
{"x":7, "y":9},
{"x":5, "y":8}
]
}
}
import com.badlogic.gdx.utils.Json;
import java.util.ArrayList;
import java.util.HashMap;
public class ClassA{
public Integer x, y;
}
public class ClassB{
public HashMap<String, ArrayList<ClassA>> objects;
}
public static void main(String[] args) {
Json json = new Json();
ClassB classB = json.fromJson(ClassB.class, "{\n" +
" \"objects\":{\n" +
" \"apple\":[\n" +
" {\"x\":3, \"y\":5},\n" +
" {\"x\":6, \"y\":9}\n" +
" ],\n" +
" \"car\":[\n" +
" {\"x\":7, \"y\":9},\n" +
" {\"x\":5, \"y\":8}\n" +
" ]\n" +
" }\n" +
" }");
System.out.println(json.toJson(classB));
}
:
Exception in thread "main" java.lang.StackOverflowError
at com.badlogic.gdx.utils.JsonWriter$OutputType.quoteValue(JsonWriter.java:187)
at com.badlogic.gdx.utils.JsonWriter.value(JsonWriter.java:88)
at com.badlogic.gdx.utils.Json.writeValue(Json.java:574)
at com.badlogic.gdx.utils.Json.writeFields(Json.java:290)
at com.badlogic.gdx.utils.Json.writeValue(Json.java:580)
at com.badlogic.gdx.utils.Json.writeFields(Json.java:290)
at com.badlogic.gdx.utils.Json.writeValue(Json.java:580)
...
を
iはC ClassBのでのHashMapから文字列(など)に"のArrayList"を変更しますodeはうまく動作します。
なぜ私は "ArrayList"を使用すると、例外がThowingされ、どのようにClassBのインスタンスに私のJSONを解析することができますか?
あなたのコードから判断すると、toJson関数に実際のバグが見つかりました。私はgithubに関する問題を提出します。その間。私はgsonに切り替えることをお勧めします、それは事実上同じです。 –
@ p.streefここに問題のリンクを貼り付けて、ソリューションに従うことができますか?ありがとう – MarsPeople
Libgdx githubの問題https://github.com/libgdx/libgdx/issues/4673 – MarsPeople