C++ REST SDK json::valueのイテレータ

オフィシャルのマニュアルに
obj.cbegin() とかってかいてあるけど、これはver1.0時代のもの。

執筆時点ではobj.as_object().cbegin()
のようにas_object()をかます必要ある。

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

理由は

json配列とオブジェクトに対する反復の実行方法を変更しました。もうstd :: pairのイテレータは返されません。代わりに、json :: arrayクラスとjson :: objectクラスの配列とオブジェクトのための別々のイテレータがあります。これにより、パフォーマンスを改善し、それに応じて調整を続けることができます。配列イテレータはjson :: valuesを返し、オブジェクトイテレータはstd :: pairを返すようになりました。

とのこと。