卡萨布兰卡 C++ REST SDK 中的 web::json::value::p arse 和 web::json::

Difference between web::json::value::parse and web::json::value::string in Casablanca C++ REST SDK

本文关键字:json web arse value C++ 中的 卡萨布兰卡 REST SDK      更新时间:2023-10-16

我有一段看起来像这样的代码(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,标题 = "test"。

字符串获取一个

字符串并从中形成一个 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 字符串。

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

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