[英]Difference between web::json::value::parse and web::json::value::string in Casablanca C++ REST SDK
[英]C++ REST SDK (Casablanca) web::json iteration
https://msdn.microsoft.com/library/jj950082.aspx有以下代码。
void IterateJSONValue()
{
// Create a JSON 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"));
// Loop over each element in the object.
for(auto iter = obj.cbegin(); iter != obj.cend(); ++iter)
{
// Make sure to get the value as const reference otherwise you will end up copying
// the whole JSON value recursively which can be expensive if it is a nested object.
const json::value &str = iter->first;
const json::value &v = iter->second;
// Perform actions here to process each string and value in the JSON object...
std::wcout << L"String: " << str.as_string() << L", Value: " << v.to_string() << endl;
}
/* Output:
String: key1, Value: false
String: key2, Value: 44
String: key3, Value: 43.6
String: key4, Value: str
*/
}
但是,对于 C++ REST SDK 2.6.0,json::value 中似乎没有 cbegin 方法。 没有它,迭代 json 节点(值)的 key:values 的正确方法是什么?
看起来您列出的文档与版本 1.0 挂钩:
本主题包含有关 C++ REST SDK 1.0(代号“Casablanca”)的信息。 如果您使用的是 Codeplex Casablanca 网页的更新版本,请使用http://casablanca.codeplex.com/documentation 上的本地文档。
查看 2.0.0 版的变更日志,您会发现:
Breaking Change - 更改了对 json 数组和对象执行迭代的方式。 不再返回 std::pair<json::value, json::value> 的迭代器。 相反, json::array 和 json::object 类上的数组和对象分别有一个单独的迭代器。 这使我们能够进行性能改进并继续进行相应的调整。 数组迭代器返回 json::values,对象迭代器现在返回 std::pair<string_t, json::value>。
我检查了 2.6.0 上的源代码,您是对的,值类根本没有迭代器方法。 看起来您需要做的是从您的value
类中获取内部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;
...
}
最新的文档和版本可以在 GitHub 链接中找到: https : //github.com/microsoft/cpprestsdk
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.