Ответ 1
Похоже, что приведенная вами документация привязана к версии 1.0:
В этом разделе содержится информация для С++ REST SDK 1.0 (кодовое имя "Casablanca" ). Если вы используете более позднюю версию с веб-страницы Codeplex Casablanca, используйте локальную документацию в http://casablanca.codeplex.com/documentation.
Взглянув на журнал изменений для версии 2.0.0, вы найдете следующее:
Breaking Change - Изменено, как выполняется итерация над массивами json и объектами. Больше не возвращается итератор std:: pair. Вместо этого существует отдельный итератор для массивов и объектов в классах json:: array и json:: object соответственно. Это позволяет нам улучшить производительность и продолжить корректировку. Итератор массива возвращает json:: values, а теперь итератор объекта возвращает std:: pair.
Я проверил источник на 2.6.0, и вы правы, для класса значений вообще нет методов итератора. Похоже, что вам нужно сделать, это захватить внутреннее представление object
из вашего класса value
:
json::value obj;
obj[L"key1"] = json::value::boolean(false);
obj[L"key2"] = json::value::number(44);
obj[L"key3"] = json::value::number(43.6);
obj[L"key4"] = json::value::string(U("str"));
// Note the "as_object()" method calls
for(auto iter = obj.as_object().cbegin(); iter != obj.as_object().cend(); ++iter)
{
// This change lets you get the string straight up from "first"
const utility::string_t &str = iter->first;
const json::value &v = iter->second;
...
}