有一个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]
。我的代码出了什么问题?
答案 0 :(得分:3)
您不需要定义自己的包装类,您可以直接使用>>> df2[df1.columns & df2.columns]
a b
0 1.952230 -0.641574
1 0.804606 -1.509773
2 -0.360106 0.939992
3 0.471858 -0.025248
4 -0.663493 2.031343
>>> df2.loc[:, df1.columns]
a b
0 1.952230 -0.641574
1 0.804606 -1.509773
2 -0.360106 0.939992
3 0.471858 -0.025248
4 -0.663493 2.031343
类型标记,如下所示:
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
。相反,它是包含 a List
的类的List
。
答案 1 :(得分:0)
azurefrog的答案非常适合您的问题。您还可以考虑切换到另一个目标反序列化类型。基本原理:List<List<Float>>
实际上是一个浮动包装列表的列表,其中每个包装器在JVM堆中保存一个浮点值,而float[][]
是一个基本浮点数组的数组,其中每个浮点值都没有需要一个包装盒,用于堆中的单个浮点值(您可以将基元数组视为具有普通存储器布局的一系列值),从而节省内存,使其更加“积极”消耗。这是描述对象和基元之间差异的good Q/A。当然,你不会看到微小阵列的显着差异,但是如果你想尝试它,你甚至不需要类型令牌(因为数组,不像泛型,允许.class
表示法):
final float[][] values = gson.fromJson(firstData, float[][].class);
...