将 Google 电子表格 json 响应映射到 java 对象会返回错误消息



我得到以下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

最新更新