2017-02-09 111 views
0

我有一段代码看起来是这样的(objweb::json::value):::解析和web :: JSON ::值::串卡萨布兰卡C++ REST SDK

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()

你能告诉我一个最小的例子,证明这种差异?我无法单独从文档中区分这两个功能。

回答

2

解析采用一个字符串并且形成JSON对象出它:

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

会给你大小2的对象,包含ID = 1和标题= “测试”。

将一个字符串形成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字符串是报价之间和看一看类型3(而不是4大小0的对象)和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 
     }; 
+0

谢谢你的简单解释和例子! – Kajal