我得到以下JSON输出:
{
"range": "Frontpage!E6:E15",
"majorDimension": "ROWS",
"values": [
[
"FundRequest"
],
[
"nOS"
],
[
"NEX"
],
[
"DREP"
],
[
"ChromaWay"
],
[
"Jura"
],
[
"Origo"
],
[
"Phantasma"
],
[
"NuCypher"
],
[
"Oasis Labs"
]
]
}
所以我创建了以下包装器:
public class Wrapper {
private String range;
private String majorDimension;
private List<String> values;
// getters and setters
}
现在我想使用GsonBuilder
将 JSON 映射到我的对象:
Gson gson = new GsonBuilder().create();
Wrapper w = gson.fromJson(jsonString, Wrapper.class);
但我收到以下错误:
java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 1 column 37 path $.values[0]
我该如何解决?有什么方法可以将其从List<List<String>>
转换为List<String>
吗?
首先,您应该使用 ListList<<List<String>>
而不是List<String>
作为值。
其次,您可以使用以下代码从List<List<String>>
获取List<String>
,
public <T> List<T> flattenListOfListsImperatively(
List<List<T>> nestedList) {
List<T> ls = new ArrayList<>();
nestedList.forEach(ls::addAll);
return ls;
}
或使用 Java-8
public <T> List<T> flattenListOfListsStream(List<List<T>> list) {
return list.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
}
此外,在 GSON 中进行搜索是否有任何内置方法来平展嵌套集合。如果有什么,请在此处发布。
编辑1:我在GSON库中进行了快速搜索,似乎有可能。您已经编写了一个适配器来实现这些目标。请参考此链接链接2