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

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

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

Author24 — интернет-сервис помощи студентам
Пытаюсь пропарсить 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.01.2015, 15:49
Ответы с готовыми решениями:

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

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

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

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

1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32992 / 21298 / 8180
Регистрация: 22.10.2011
Сообщений: 36,593
Записей в блоге: 8
30.01.2015, 18:08 2
Ну, по логике - вот так должно быть:
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
30.01.2015, 18:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.01.2015, 18:08
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru