我得到以下 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]我如何解决它?我有什么办法可以将它从 a 转换List<List<String>>为 aList<String>吗?
1 回答
郎朗坤
TA贡献1921条经验 获得超9个赞
首先,您应该使用 ListList<<List<String>>而不是List<String>for values。
其次,您可以List<String>从List<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 库中进行了快速搜索,这似乎是可能的。您已经编写了一个适配器来实现这些功能。
添加回答
举报
0/150
提交
取消