[英]Java Json to List of Lists
有一個Float值列表作為Json,如何獲得List<List<Float>>
?
我嘗試過類似的東西:
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]
。 我的代碼出了什么問題?
您不需要定義自己的包裝類,您可以直接使用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]]
除非MyLine
本身是List
否則List<MyLine>
實際上不是List<List<Float>>
。 相反,它是一個List
, 其中包含一個一類List<Float>
。
azurefrog的答案非常適合您的問題。 您還可以考慮切換到另一個目標反序列化類型。 基本原理: List<List<Float>>
實際上是一個浮動包裝列表的列表,其中每個包裝器在JVM堆中保存一個浮點值,而float[][]
是一個基本浮點數組的數組,其中每個浮點值對於堆中的單個浮點值,不需要包裝盒(您可以將基元數組視為具有普通存儲器布局的一系列值),從而節省內存,使其更加“積極”消耗。 這是一個很好的Q / A,描述了對象和基元之間的差異。 當然,你不會看到微小數組的顯着差異,但是如果你想嘗試它,你甚至不需要類型標記(因為數組,不像泛型,允許.class
表示法):
final float[][] values = gson.fromJson(firstData, float[][].class);
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.