Я пытаюсь добавить определенные значения из следующего JSON в Java ArrayList. Затем я хотел бы использовать этот ArrayList в JSP. Это JSON:
{
"page": 1,
"rpp": 3,
"total": 3294,
"request_time": "2018-04-23T16:10:20+01:00",
"stops": [
{
"atcocode": "370023715",
"longitude": -1.46616,
"latitude": 53.38248,
"distance": 57
},
{
"atcocode": "370027281",
"longitude": -1.46583,
"latitude": 53.38228,
"distance": 77
},
{
"atcocode": "370022803",
"longitude": -1.46616,
"latitude": 53.38227,
"distance": 80
}
]
}
Я хотел бы добавить каждый элемент долготы и широты из-под поддерева "остановок" в 2 разных списка ArrayList. Это мой код для этого:
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{
try {
String json = readUrl (link);
JsonParser parser = new JsonParser();
JsonElement element = parser . parse (json);
if (element.isJsonObject()) {
JsonObject bus = element . getAsJsonObject ();
JsonArray array = bus . getAsJsonArray ("stops");
for (int i = 0; i < array.size(); i++) {
List<String> longitudes = new ArrayList<String>();
List<String> latitudes = new ArrayList<String>();
longitudes.add(array.get(i)).get("longitude");
latitudes.add(array.get(i)).get("latitude");
request.setAttribute("longitudes", longitudes);
request.setAttribute("latitudes", latitudes);
RequestDispatcher dispatcher = request . getRequestDispatcher ("latlong.jsp");
dispatcher.forward(request, response);
}
}
}
}
я получаю следующую ошибку: «ошибка: несовместимые типы: JsonElement не может быть преобразован в String»
Заранее спасибо!




Вместо
longitudes.add(array.get(i)).get("longitude");
latitudes.add(array.get(i)).get("latitude");
Использовать
longitudes.add(array.get(i).get("longitude").getAsString());
latitudes.add(array.get(i).get("latitude").getAsString());
Благодарность! Я все еще получаю ту же ошибку, я буду пытаться
Обновлено, пожалуйста, попробуйте
Не могли бы вы указать полную трассировку стека с помощью моего кода. Я уверен, что код в ответе должен решить эту проблему. Вы видели последнее изменение?
Еще одна ошибка заключается в том, что списки longitudes, latitudes находятся внутри цикла.
Вот простой тестируемый фрагмент кода, который извлекает данные из JSON и может быть протестирован локально. Вы можете адаптировать его под свои цели ...
public static void main(String[] args) {
String json = "{\n" +
"\"page\": 1,\n" +
"\"rpp\": 3,\n" +
"\"total\": 3294,\n" +
"\"request_time\": \"2018-04-23T16:10:20+01:00\",\n" +
"\"stops\": [\n" +
"{\n" +
" \"atcocode\": \"370023715\",\n" +
" \"longitude\": -1.46616,\n" +
" \"latitude\": 53.38248,\n" +
" \"distance\": 57\n" +
"},\n" +
"{\n" +
" \"atcocode\": \"370027281\", \n" +
" \"longitude\": -1.46583,\n" +
" \"latitude\": 53.38228,\n" +
" \"distance\": 77\n" +
"},\n" +
"{\n" +
" \"atcocode\": \"370022803\",\n" +
" \"longitude\": -1.46616,\n" +
" \"latitude\": 53.38227,\n" +
" \"distance\": 80\n" +
" }\n" +
"]\n" +
"}";
JsonParser jsonParser = new JsonParser();
JsonElement element = jsonParser.parse(json);
List<String> longitudes = new ArrayList<>();
List<String> latitudes = new ArrayList<>();
if (element.isJsonObject()) {
JsonObject bus = element . getAsJsonObject ();
JsonArray array = bus.getAsJsonArray("stops");
array.forEach(jsonElement -> {
extractToList(longitudes, (JsonObject) jsonElement, "longitude");
extractToList(latitudes, (JsonObject) jsonElement, "latitude");
});
}
System.out.println(longitudes);
System.out.println(latitudes);
}
private static void extractToList(List<String> list, JsonObject jsonElement, String field) {
final JsonElement longitude = jsonElement.get(field);
if (longitude != null) {
list.add(longitude.getAsString());
}
}
Если вы запустите это, вы получите распечатку на консоли:
[-1.46616, -1.46583, -1.46616]
[53.38248, 53.38228, 53.38227]
Я предположил, что вы используете библиотеку Google GSON.
Это просто проблема с паренами? Похоже, вы полностью игнорируете широту / долготу ... Попробуйте вместо этого
longitudes.add(array.get(i).get("longitude"));