Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826

Сложности с гибкостью json reader

17.04.2016, 22:08. Показов 1429. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер,

есть код
C++
1
2
3
4
int RKJsonReader::getInt(const char* node, const int iterator, const char* key, int def/* = 0*/)
{
    return doc[node][iterator][key].GetInt();
}
вызов
C++
1
auto some = reader.getInt("images", i, "_p", -1);
проблема в том, что хочется ("images", i, "_p", -1) вызывать как хочу. Главное правило, что в параметрах метода до последнего параметра засунуть после внутренней переменной doc в квадратные скобки.

Примеры
reader.getInt("images", i, "_p", -1); -> doc[node][iterator][key].GetInt()
reader.getInt("images", i, -1); -> doc[node][iterator].GetInt()
reader.getInt("images", -1); -> doc[node].GetInt()

Как бонус еще иметь возможность проверять наличие
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int RKJsonReader::getInt(some magic i guess, int def/* = 0*/)
{
    if(doc[node].exist())
    {
        if(doc[node][i].exist()
        {
            ....
            return doc[node][iterator][key].GetInt();
        };
    } else
    {
        MyEXEPTION(false, "Can found ....")
    }
    return -1;
}
Огромная проблема, что любой тип возвращаемым квадратными скобками являются private ( rapidjson libary ).

Как сделать мега гибкость как в примерах?) Пахнет в сторону Variadic templates?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
17.04.2016, 22:08
Ответы с готовыми решениями:

JSON Reader. Как прочитать значение переменной в строке JSON
Добрый день! Подскажите пожалуйста как прочитать значение переменной в строке JSON: Есть строка: String^ json =...

Сложности с кодировкой кириллицы и JSON
Вот такой код: $q=mysql_query("SELECT * FROM `dictionary`"); mysql_fetch_array($q); while($e=mysql_fetch_assoc($q)) ...

Работа с json есть сложности
Добрый день, Имеется Json следующего вида: {"ListOfRecognized": , "comment":"ReservedForFuture" } Формируется...

3
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
18.04.2016, 00:26
Лучший ответ Сообщение было отмечено rikimaru2013 как решение

Решение

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
44
45
46
47
48
49
50
namespace
{
    template<class ...Ts>
    struct ToBracketWithExistCheck
    {
    };
 
    template<typename Doc, typename T>
    struct ToBracketWithExistCheck<Doc, T>
    {
        auto operator()(Doc& doc, T&& value) -> decltype(doc[value])
        {
            if (doc[value].exist())
            {
            return doc[value];
            }
            else
            {
                throw "ooops";
            }
        }
    };
 
    template<typename Doc, typename T, typename ... Args>
    struct ToBracketWithExistCheck<Doc, T, Args...>
    {
        auto operator()(Doc& doc, T&& value,
                Args&& ... args) -> decltype(ToBracketWithExistCheck<decltype(doc[value]), Args...>
                        {}(doc[value],
                                std::forward<Args>(args)...))
        {
            if (doc[value].exist())
            {
            return ToBracketWithExistCheck<decltype(doc[value]), Args...> { }(
                    doc[value], std::forward<Args>(args)...);
            }
            else
            {
                throw "ooops";
            }
        }
    };
}
 
template<typename ...T>
auto getInt(T&& ...values) -> decltype(ToBracketWithExistCheck<T...>
        {}(std::forward<T>(values)...).getInt())
{
    return ToBracketWithExistCheck<T...> { }(std::forward<T>(values)...).getInt();
}
getInt(doc,node,iterator,key) -> doc[node][iterator][key].GetInt()
2
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
18.04.2016, 00:33  [ТС]
Nosey, буду вкуривать
0
 Аватар для Nosey
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
18.04.2016, 00:44
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
буду вкуривать
Просто рекурсия + идеальная передача + вывод типов С++11.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.04.2016, 00:44
Помогаю со студенческими работами здесь

Spring REST, Hibernate. Сложности десериализации JSON при one-to-many
Всем добрый день. Возникла проблема, подходящее решение которой никак не нагуглю. Делаю REST API на Spring и Hibernate. При попытке...

Ошибка при обработке Json - Cannot deserialize the current JSON array because the type requires a JSON object
Дополнительные сведения: Cannot deserialize the current JSON object (e.g. {&quot;name&quot;:&quot;value&quot;}) into type 'System.Collections.Generic.List`1'...

Java, JSON и JSON Simple. Непонятка с созданием объекта JSON на сервере для отправки на фронт
Здравствуйте. Разрабатываю интернет-магазин на Java. Мне нужно на фронте получить список товаров из базы данных для отображения на...

Ошибка при обработке Json - Cannot deserialize the current JSON array because the type requires a JSON object
Всем привет! Помогите, плиз, разобраться с ошибкой: An unhandled exception of type 'Newtonsoft.Json.JsonSerializationException'...

SyntaxError: JSON.parse: unexpected character at line 1 column 2 of the JSON data
Всем привет, пытаюсь произвести запрос к обработчику c помощью AJAX, выдает ошибку при парсинге JSON че за фигня? гляньте плииз ребята ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru