簡體   English   中英

Java Json到列表列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM