Всем привет! Недавно увлекся программированием, и появилась необходимость десериализовать данные с помощью GSON (либо чего-то более подходящего), чтобы положить всё это в БД.
Ответ сервера примерно такой (получаю в jsoup Document):
теги html и body
4887854839908
<!---->
<!---->0
<!---->6879
<!---->0
<!---->
<!--json-->
{"key":"value", "key":"value", "key":"value", "key":"value",
"list":[
["value1", "value2", "value3", "value4", "value5", "value6"],
["value1", "value2", "value3", "value4", "value5", "value6"],
["value1", "value2", "value3", "value4", "value5", "value6"],
.....
.....
.....
],
"key":"value", "key":"value", "key":"value", "key":"value"}
<!---->
...... //Здесь куча div классов
<!---->
<!--json-->
{"key":"value", "key":"value", "key":"value", "key":"value",
"key":"value", "key":"value", "key":"value", "key":"value"}
<!---->
...... //опять div классы
Отсюда нужно вытащить массив значений "list" и несколько "key":"value". Как всё это проще и грамотнее преобразовать?
Предположим, что JSON будет всегда отделяться от остального HTML при помощи данных в вашем примере тегов:
String jsonCommentStart = "<!--json-->"; // это начало
String jsonCommentEnd = "<!---->"; // это конец
String str = "<html>...</html>" //ваша исходная строка
Тогда мы получим строку с JSON, отсекая все лишнее:
int jsonContentsBegin =
str.indexOf(jsonCommentStart) + jsonCommentStart.length(); //начало содержимого
Log.i("TEST", "onCreate: " + jsonContentsBegin);
//строка, начинающаяся сразу после <!--json-->
String json = str.substring(jsonContentsBegin);
//окончание JSON
int jsonContentsEnd = json.indexOf(jsonCommentEnd) + jsonContentsBegin;
Log.i("TEST", "onCreate: " + jsonContentsEnd);
String jsonContents = str.substring(jsonContentsBegin, jsonContentsEnd);
Строка, содержащаяся в переменной jsonContents - и есть искомый json. Очищаем от лишнего и преобразуем в JSON:
jsonContents = jsonContents.trim();
try
{
//объект, из которого вы сможете получать нужные данные
JSONObject object = new JSONObject(jsonContents);
Log.i("TEST", "onCreate: JSON: " + object.toString());
} catch (JSONException e) {
Log.i("TEST", "onCreate: " + e);
}
Чтобы получить второй, третий и т.д. JSON объект из HTML, возьмите подстроку, начинающуюся с позиции jsonContentsEnd. С этой подстрокой проведите те же действия, что я указывал выше.
Чтобы вытаскивать какие-то данные из JSON, используйте код:
object.getString(key); // - для строки
object.getJSONArray(key);// - для массива
Где key - это ключ какого-то либо значения. Больше информации тут
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости