猿问

将 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]

我如何解决它?我有什么办法可以将它从 a 转换List<List<String>>为 aList<String>吗?


慕神8447489
浏览 163回答 1
1回答

郎朗坤

首先,您应该使用 ListList<<List<String>>而不是List<String>for values。其次,您可以List<String>从List<List<String>>使用下面的代码中获得,public <T> List<T> flattenListOfListsImperatively(&nbsp; &nbsp; List<List<T>> nestedList) {&nbsp; &nbsp; List<T> ls = new ArrayList<>();&nbsp; &nbsp; nestedList.forEach(ls::addAll);&nbsp; &nbsp; return ls;}或使用 Java-8public <T> List<T> flattenListOfListsStream(List<List<T>> list) {&nbsp; &nbsp; return list.stream()&nbsp; &nbsp; &nbsp; .flatMap(Collection::stream)&nbsp; &nbsp; &nbsp; .collect(Collectors.toList());&nbsp; &nbsp;&nbsp;}此外,在 GSON 中进行搜索是否有任何内置方法可以展平嵌套集合。如果有什么,请在这里发布。编辑 1:我在 GSON 库中进行了快速搜索,这似乎是可能的。您已经编写了一个适配器来实现这些功能。
随时随地看视频慕课网APP

相关分类

Java
我要回答