Я пытаюсь получить вложенный JsonArray внутри JsonObject: это метод, который пытается проанализировать JsonArray:
public void getCategoriesTest() throws IOException {
client = new HttpClientHandler(categoriesUrl, headersMap);
String response = client.getRequest();
response = "{\"success\":{\"total\":4},\"contents\":{\"categories\":[{\"name\":\"jod\",\"description\":\"Joke of the day \",\"language\":\"en\",\"background\":\"\"},{\"name\":\"animal\",\"description\":\"Animal Joke of the day \",\"language\":\"en\",\"background\":\"\"},{\"name\":\"blonde\",\"description\":\"Blonde joke of the day!\",\"language\":\"en\",\"background\":\"\"},{\"name\":\"knock-knock\",\"description\":\"Knock Knock joke of the day!\",\"language\":\"en\",\"background\":\"\"}],\"copyright\":\"2019-20 https://jokes.one\"}}";
List<JsonArray> array = new ArrayList<>();
array = FileUtil.asList(response, "contents.categories", JsonArray.class);
}
, и я использую этот метод generi c чтобы проанализировать JsonObject и вернуть JsonArray:
public static <T> List<T> asList(String json, String path, Class<T> clazz) {
Gson gson = new Gson();
String[] paths = path.split("\\.");
JsonObject o = gson.fromJson(json, JsonObject.class);
for (int i = 0; i < paths.length - 1; i++) {
o = o.getAsJsonObject(paths[i]);
}
JsonArray jsonArray = o.getAsJsonArray(paths[paths.length - 1]);
Class<T[]> clazzArray = (Class<T[]>) ((T[]) Array.newInstance(clazz, 0)).getClass();
T[] objectArray = gson.fromJson(jsonArray, clazzArray);
return Arrays.asList(objectArray);
}
Но когда я запускаю функцию, в этой строке происходит сбой -> T [] objectArray = gson.from Json (jsonArray, clazzArray); Я получаю следующее сообщение об ошибке:
com.google.gson.JsonSyntaxException: Expected a com.google.gson.JsonArray but was com.google.gson.JsonObject
Несмотря на то, что я указал путь jsonarray наверняка. что мне не хватает?