c++ - Casablanca C++ REST SDK 中 web::json::value::parse 和 web::json::value::string 的区别

标签 c++ json casablanca

我有一段代码看起来像这样(obj 是一个 web::json::value):

try {
    obj[key_str] = web::json::value::parse(value_str);
}
catch (...) {
    obj[key_str] = web::json::value::string(value_str);
}

我找不到两者之间的区别,因为对于我给出的任何输入 value_str,例如字符串 "value1",只有catch 运行。

所以我的问题是 - ::string()::parse() 之间的确切区别是什么?

您能给我一个证明这种差异的最小示例吗?我无法仅从文档中区分这两个功能。

最佳答案

parse 接受一个字符串并从中形成一个 json 对象:

{"id": 1,"title": "test" }

将为您提供一个大小为 2 的对象,其中包含 id = 1 和 title = "test"。

string 接受一个字符串并从中形成一个 json 字符串

后面的例子会返回一个包含"id": 1,"title": "test"的json字符串。

这基本上意味着您正在尝试解析一个不被识别为 json 对象的 json 字符串。您给出的示例就是这种情况。

parse(const std::string& s)  { 
   std::cout << json.parse(s) << std::endl;
   std::cout << json.parse(s).size() << std::endl;
   std::cout << json.parse(s).type() << std::endl;
   std::cout << json.string(s) << std::endl;
   std::cout << json.string(s).size() << std::endl;
   std::cout << json.string(s).type() << std::endl;             
}

对于 {"id": 1,"title": "test"} 返回:

{"body":"body test","id":1,"title":"test","userId":1}
4
3
"{\"userId\":1, \"id\": 1,\"title\": \"test\",\"body\": \"body test\"}"
0
2

注意 json 对象的大小以及 json 字符串位于引号和大小 0 而不是 4 之间的事实。看看类型 3(对象)和 2 字符串。

对于“值 1”,它不是 json,它是一个字符串,您将拥有:

"value 1"
0
"\"value 1\""
0

注意这里的 2 个对象的大小为 0,类型为 2(字符串)。
这是类型的值:

enum value_type
        {
            /// Number value
            Number,
            /// Boolean value
            Boolean,
            /// String value
            String,
            /// Object value
            Object,
            /// Array value
            Array,
            /// Null value
            Null
        };

关于c++ - Casablanca C++ REST SDK 中 web::json::value::parse 和 web::json::value::string 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42137225/

相关文章:

c++ - 默认模板参数 - 不必来自对吗?为什么有效?

javascript - 在 Node.js 中编写格式化的 JSON

java - 避免 gson 将 json 字符串反序列化为 LinkedHashMap 类成员

c++ - 在卡萨布兰卡获取 HTTP 请求的 IP

c++ - 在 C/C++ 良好实践中使用 '!!' 是否常见?

c++ : error: member access into incomplete type , 未使用的参数 [-Werror,-Wunused-parameter]

c++ - 检查派生类类型

javascript - Json数据计算并转html

c++调试断言HTTP请求失败

c++ - 无法使用 http_listener(C++ REST SDK)监听具有本地主机地址的特定端口号