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

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

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

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

есть код
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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.04.2016, 22:08
Ответы с готовыми решениями:

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

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

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

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

3
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
18.04.2016, 00:26 2
Лучший ответ Сообщение было отмечено 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  [ТС] 3
Nosey, буду вкуривать
0
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
18.04.2016, 00:44 4
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
буду вкуривать
Просто рекурсия + идеальная передача + вывод типов С++11.
0
18.04.2016, 00:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.04.2016, 00:44
Помогаю со студенческими работами здесь

Ошибка при обработке 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...

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...

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


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

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