Java Json到列表列表

Java Json到列表列表,java,json,gson,Java,Json,Gson,有一个以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(firs

有一个以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());

但我有一个错误,应该是BEGIN_对象,但在第1行第3列路径$[0]处是BEGIN_数组。我的代码有什么问题?

您不需要定义自己的包装器类,只需直接使用List的类型标记,如下所示:


列表实际上不是列表,除非MyLine本身是列表。相反,它是一个包含列表的类的列表。

您不需要定义自己的包装器类,您可以直接使用List的类型标记,如下所示:


列表实际上不是列表,除非MyLine本身是列表。相反,它是一个包含列表的类的列表。

azurefrog的答案非常适合你的问题。您也可以考虑切换到另一个目标反序列化类型。理由:List实际上是一个float包装器列表,其中每个包装器在JVM堆中分别持有一个float值,而float[][]是一组原始浮点数组,其中每个浮点值不需要堆中的单个浮点值的包装盒,可以考虑一组原语数组,它们具有普通内存布局的值,从而节省了更多攻击性内存的内存。下面是一个描述对象和基本体之间差异的示例。当然,您不会看到微小数组的显著差异,但如果您想尝试,您甚至不需要类型标记,因为数组与泛型不同,允许使用。类表示法:

最终浮点[]值=gson.fromJsonfirstData,浮点[]。类; ...
azurefrog的答案非常适合你的问题。您也可以考虑切换到另一个目标反序列化类型。理由:List实际上是一个float包装器列表,其中每个包装器在JVM堆中分别持有一个float值,而float[][]是一组原始浮点数组,其中每个浮点值不需要堆中的单个浮点值的包装盒,可以考虑一组原语数组,它们具有普通内存布局的值,从而节省了更多攻击性内存的内存。下面是一个描述对象和基本体之间差异的示例。当然,您不会看到微小数组的显著差异,但如果您想尝试,您甚至不需要类型标记,因为数组与泛型不同,允许使用。类表示法:

最终浮点[]值=gson.fromJsonfirstData,浮点[]。类; ...
使用gson是吗?字符串中的JSON有效吗???@jackjay是的使用gson是吗?字符串中的JSON有效吗???@jackjay是的
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]]