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

时间:2017-02-09 12:50:56

标签: c++ json casablanca

我有一段看起来像这样的代码(objweb::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内的语句运行。< / p>

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

你能告诉我一个展示这种差异的最小例子吗?我无法仅从文档中区分这两个函数。

1 个答案:

答案 0 :(得分:2)

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

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

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