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

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

30.01.2015, 15:49. Показов 2716. Ответов 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
33197 / 21493 / 8233
Регистрация: 22.10.2011
Сообщений: 36,882
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru