Json Expected BEGIN_ARRAY but was STRING at line 1 column 2 path $
Пытаюсь запарсить json, но постоянно возникает сообщение об ошибке.
От сервера приходит вот такой json (это часть довольно большого json):
"[{\"id_list\": [19], \"meas_lat\": 55.788652215575866, \"meas_lon\": 49.00268204440898}, {\"id_list\": [1], \"meas_lat\": 64.0, \"meas_lon\": 24.66}, {\"id_list\": [18], \"meas_lat\": 75.0, \"meas_lon\": 80.0}, {\"id_list\": [13], \"meas_lat\": 22.0, \"meas_lon\": 34.0}]"
Пытаюсь его запарсить с помощью Gson (пока хотя бы разложить на элементы коллекции ArrayList()):
Gson g = new Gson();
ArrayList<String> list = g.fromJson(lims,new TypeToken<ArrayList<String>>() {}.getType());
При этом, проверку на валидность json проходит (проверял на https://jsonlint.com/), но постоянно выдается сообщение об ошибке:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 2 path $
В чем может быть проблема?
Ответы (1 шт):
Решение нашел:
Нужно было немного подправить сам json в части:
json=json.replaceAll("\\\\",""); //удаляем backslash
json=json.substring(1,json.length()-1); //удаляем кавычки в начале и в конце
И за тем запарсить например вот так:
ArrayList<SearchElem> list = g.fromJson(json,new TypeToken<ArrayList<SearchElem>>() {}.getType());
Где класс SearchElem:
public class SearchElem {
private Double meas_lat;
private Double meas_lon;
private ArrayList<Integer> id_list;
public SearchElem(){}
}
Тогда парсится корректно. Надеюсь кому пригодится