Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
74 / 54 / 17
Регистрация: 10.07.2014
Сообщений: 329

Получения списка элементов массива при парсинге JSON на XE4

30.01.2015, 15:49. Показов 2739. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пытаюсь пропарсить JSON
сам он такого вида:
JSON
1
{"text_unique":"0.00","result_json":"{\"date_check\":\"30.01.2015 13:58:52\",\"unique\":0,\"urls\":[{\"url\":\"http:\\\/\\\/rss1aggregator.ru\\\/stream\\\/ithappens_ru\\\/\",\"plagiat\":100},{\"url\":\"http:\\\/\\\/ithappens.me\\\/story\\\/13036\",\"plagiat\":100},{\"url\":\"http:\\\/\\\/ithappens.me\\\/\",\"plagiat\":100},{\"url\":\"http:\\\/\\\/blevada.ru\\\/item\\\/8785284\",\"plagiat\":100},{\"url\":\"http:\\\/\\\/www.umori.li\\\/ithappens.html\",\"plagiat\":86.27}]}","unique":"0.00"}
Использую немного доработанный класс-обертку, найденную здесь на форуме:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class JS
{
    public:
        TJSONPair* JSONPair;
        TJSONObject* JSONObject;
        UnicodeString Source;
 
        JS(UnicodeString Source)
        {
            this->Source = Source;
        }
 
        UnicodeString On(UnicodeString Name)
        {
            TStringList* list = new TStringList;
            try {
 
              list->Delimiter = '-';
              list->DelimitedText = Name;
              JSONObject = dynamic_cast<TJSONObject*>(TJSONObject::ParseJSONValue(Source));
              if (JSONObject==NULL) {
                return "";
              }
              for ( int i = 0; i < list->Count; i++ )
              {   String ls = list->Strings[i];
                  JSONPair = JSONObject->Get(ls);
                  if (JSONPair==NULL) {
                    continue;
                  }
                  String sPair = JSONPair->JsonValue->Value();
                  JSONObject = dynamic_cast<TJSONObject*>(TJSONObject::ParseJSONValue(sPair));
                  if (JSONObject==NULL) {
                    continue;
                  }
              }
            } __finally {
              delete list;
            }
            if (JSONPair==NULL)
              return "";
            return JSONPair->JsonValue->Value();
        }
};
Вызов:
C++
1
2
3
4
5
6
7
  TStringList *sl = new TStringList();
  sl->LoadFromFile("1.txt");//здесь для теста текст самого JSON
  String s = sl->Text;
 
  String ss1 = GetJSON(s,"text_uid");// пусто ибо нет такого поля
  String ss2 = GetJSON(s,"unique"); // "0.00" - корректно
  String ss4 = GetJSON(s,"result_json-unique"); - "0" - тоже корректно
Данный класс позволяет получать результат с вложенными данными
Но я не могу получить массив "urls" содержащийся в подJSON result_json
В идеале бы получить вообще список всех элементов данного массива по имени
Как туда добраться?
Если есть решение.. можно без использования этого класса.
Просто цепочкой вызовов JSONObject-JSONArray - запутался чегойто
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.01.2015, 15:49
Ответы с готовыми решениями:

Проблема получения атрибутов при парсинге xml
Здравствуйте. Подскажите как разобраться xml документом. У меня есть xsd-схема: &lt;?xml version = '1.0' encoding = 'utf-8'?&gt; ...

Проблема при парсинге JSON
Создал программу, которая скачивает данные пользователя с vk api, парсит их и говорит, онлайн он или нет. Каких только способов не...

Ошибка при парсинге JSON
Нужно распарсить JSON и информацию оттуда записать в label. При попытке присвоения label'у текста из JSON выдает ошибку: Instance member...

1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33398 / 21508 / 8236
Регистрация: 22.10.2011
Сообщений: 36,904
Записей в блоге: 12
30.01.2015, 18:08
Ну, по логике - вот так должно быть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    TStringList *sl = new TStringList();
    sl->LoadFromFile("1.txt");
    String s = sl->Text;
 
    std::auto_ptr<TJSONObject> Json(static_cast<TJSONObject*>(TJSONObject::ParseJSONValue(s)));
    TJSONObject *obj = static_cast<TJSONObject*>(Json->Get("result_json")->JsonValue);
 
    // теперь получаем из строки, хранящейся в result_json сам json, и дальше работаем с ним
    std::auto_ptr<TJSONObject> InnerJson(static_cast<TJSONObject*>(TJSONObject::ParseJSONValue(obj->Value())));
    TJSONArray *Jarr = static_cast<TJSONArray*>(InnerJson->Get("urls")->JsonValue);
    for (int i = 0; i < Jarr->Size(); i++)
    {
        TJSONObject *jItem = static_cast<TJSONObject*>(Jarr->Get(i));
        String url = jItem->Get("url")->JsonValue->Value();
        Memo1->Lines->Add(url); // вывести для теста все url-ы в memo
    }
, проверяй...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.01.2015, 18:08
Помогаю со студенческими работами здесь

KeyError при парсинге AJAX(json).Python 3.6.2
Всем привет, решил написать парсер на python одного сайта, где данные добавляются динамически с помощью javascript.И на раннем этапе...

Выдает nil при парсинге JSON из базы сайта на битриксе
Всем привет, есть странная проблема: скрипт делает запрос в базу данных сайта на 1с битриксе, выбирает какие то данные и формирует валидный...

Вставка переменной при парсинге данных из объекта/или JSON
Здравствуйте! Имею: let address = &quot;rMQ98K56yXJbDGv49ZSmW51sLn94Xe1mu1&quot;; let line = &quot;i.outcome.balanceChanges.&quot; +...

"Ссылка на объект не указывает на экземпляр"- при парсинге json
парсю json ответ, нужно парсить результат параметра new_from, но ошибка при компиляции

Передача json массива и вызов метода для получения результатов
нужно отправить POST запрос на url API и передать JSON объект, получить ответный объект в формате json вызовом метода «calc», подскажите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru