.fromJson(mystring, Object.class);
を使用しようとしたが、ネストされたArrayListの-Sを得ました。
私は、ネストされた取得したいdouble[][]...[]
これは可能ですか?
UPDATE
私はまだ(次のカスタムアダプタ
public class DoubleArrayAdapter extends TypeAdapter<Object> {
@Override
public void write(JsonWriter out, Object value) throws IOException {
if(value.getClass().isArray()) {
out.beginArray();
int length = Array.getLength(value);
for (int i = 0; i < length; i ++) {
Object arrayElement = Array.get(value, i);
write(out, arrayElement);
}
out.endArray();
}
else {
out.value((double) value);
}
}
@Override
public Object read(JsonReader in) throws IOException {
if(in.peek() == JsonToken.BEGIN_ARRAY) {
ArrayList<Object> elements = new ArrayList<>();
in.beginArray();
do {
elements.add(read(in));
} while(in.peek() != JsonToken.END_ARRAY);
in.endArray();
if(elements.size() == 0) {
return new double[0];
}
else {
Class cls = elements.get(0).getClass();
if(cls.isArray()) {
Object ans = Array.newInstance(cls, elements.size());
for(int i=0; i<elements.size(); ++i) {
Array.set(ans, i, elements.get(i));
}
return ans;
}
else {
double[] ans = new double[elements.size()];
for(int i=0; i<elements.size(); ++i) {
ans[i] = (double) elements.get(i);
}
return ans;
}
}
}
else {
return in.nextDouble();
}
}
}
を書いて、次のコード
public static Gson getGsonWithDoubleArrayAdapter() {
if(gson == null) {
gson = new GsonBuilder()
.serializeNulls()
.setPrettyPrinting()
.registerTypeAdapter(Object.class, new DoubleArrayAdapter())
.create();
}
return gson;
}
でGsonオブジェクトを準備する。しかし、それはそれにもかかわらず活性化しないように見えますArrayList-sを生成します)。このように
Gson gson = new Gson();
ClassName download = gson.fromJson(input, ClassName.class); // creates POJO from input, into a ClassName object
ClassName
が似ていること:
public class ClassName {
String name;
List<ObjInList> list;
}
public class ObjInList {
String description;
float price;
}
私もthisウェブサイトをお勧めします彼らは、設定された長さを持っていないので、
whith、直接このアダプタで文字列を解析されましたか? – Salman
@Salmanちょうど 'ArrayList'です。私は実行時にそれを見るだけです。 – Dims
残念ながら、Gsonで 'java.lang.Object'デシリアライズをオーバーライドすることはできません。 –