Estou recebendo o seguinte resultado JSON:
{
"range": "Frontpage!E6:E15",
"majorDimension": "ROWS",
"values": [
[
"FundRequest"
],
[
"nOS"
],
[
"NEX"
],
[
"DREP"
],
[
"ChromaWay"
],
[
"Jura"
],
[
"Origo"
],
[
"Phantasma"
],
[
"NuCypher"
],
[
"Oasis Labs"
]
]
}
Então, eu criei o seguinte invólucro:
public class Wrapper {
private String range;
private String majorDimension;
private List<String> values;
// getters and setters
}
Agora eu quero usar GsonBuilder
para mapear o JSON ao meu objeto:
Gson gson = new GsonBuilder().create();
Wrapper w = gson.fromJson(jsonString, Wrapper.class);
mas eu recebo o seguinte erro:
java.lang.IllegalStateException: Expected a string but was BEGIN_ARRAY at line 1 column 37 path $.values[0]
Como faço para corrigir isso? Existe alguma maneira para mim para convertê-lo a partir de um List<List<String>>
a um List<String>
?
Primeiro, você deve usar List List<<List<String>>
em vez de List<String>
para os valores.
Segundo, você pode obter List<String>
a partir List<List<String>>
usando o código abaixo,
public <T> List<T> flattenListOfListsImperatively(
List<List<T>> nestedList) {
List<T> ls = new ArrayList<>();
nestedList.forEach(ls::addAll);
return ls;
}
ou usando Java-8
public <T> List<T> flattenListOfListsStream(List<List<T>> list) {
return list.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
}
Além disso, fazer uma pesquisa no Gson há qualquer built-in maneira de achatar a coleção aninhada. Por favor, poste aqui se há alguma coisa.
Edit 1: Eu fiz uma rápida pesquisa na biblioteca Gson e parece possible.You têm escrever um adaptador para conseguir as coisas. Por favor, consulte esta ligação link2