Всем привет! Недавно увлекся программированием, и появилась необходимость десериализовать данные с помощью 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
- это ключ какого-то либо значения. Больше информации тут
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Правильно-ли я создал агрегацию? В методе main я передаю значения как class Sim, так class Battery и вызываю метод printА могу ли я так передать их, но через...
После отправки файла на сервер в редакторе генерируется ссылка(из данных которые вернулись)Как можно получить доступ к этой ссылке, что бы установить...