2017-04-10 11 views
0

JsonとしてFloat値のリストのリストがありますが、どのようにしてList<List<Float>>を得ることができますか?Java Jsonをリストのリストにする

私のような何か試してみました:

class MyLine{ 
    List<Float> values; 
} 
String firstData = "[[0.11492168, -0.30645782, 9.835381], [0.12449849, -0.29688102, 9.844957]]" 
Gson gson = new Gson(); 
List<MyLine> firstList = gson.fromJson(firstData, new TypeToken<List<MyLine>>(){}.getType()); 

を私はエラーExpected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 3 path $[0]を持っています。私のコードで何が間違っていますか?あなたがあなた自身のラッパークラスを定義する必要はありません

+0

gsonを使っていますか? – Remario

+0

はあなたの文字列に有効なJSONですか? –

+0

@jackjayはいそうです – littlewombat

答えて

2

、あなただけのように直接List<List<Float>>のタイプのトークンを使用することができます。

String firstData = "[[0.11492168, -0.30645782, 9.835381], [0.12449849, -0.29688102, 9.844957]]"; 
Gson gson = new Gson(); 
List<List<Float>> firstList = gson.fromJson(firstData, new TypeToken<List<List<Float>>>() {}.getType()); 

System.out.println(firstList); 
// prints [[0.11492168, -0.30645782, 9.835381], [0.12449849, -0.29688102, 9.844957]] 

List<MyLine>は実際にList<List<Float>>MyLineない限り、それ自体ではありませんListです。むしろ、 a List<Float>を含むクラスのListです。

0

azurefrogの答えはあなたの質問に最適です。別のターゲットデシリアライゼーションタイプに切り替えることも考えられます。根拠:float[][]が各float値は、単一のフロートのラッパー・ボックスを必要としない原始的な山車の配列の配列である一方でList<List<Float>>が、実際にはすべてのラッパーが分離あなたのJVMのヒープ内のfloat値を保持しているフロートラッパーのリストのリストであります(単純なメモリ配列を持つ一連の値をプリミティブの配列とみなすことができます)、メモリをより積極的に消費しないようにします。オブジェクトとプリミティブの違いを説明するgood Q/Aがあります。確かに、小さな配列では大きな違いは見られませんが、試したい場合は型トークンは必要ありません(配列はジェネリックと異なり、.classの表記が可能です)

final float[][] values = gson.fromJson(firstData, float[][].class); 
... 
関連する問題