为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕神8447489 2021-07-15 17:01:23
我得到以下 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 库中进行了快速搜索,这似乎是可能的。您已经编写了一个适配器来实现这些功能。


查看完整回答
反对 回复 2021-07-29
  • 1 回答
  • 0 关注
  • 162 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信