Casablanca C++ REST SDK 中 web::json::value::parse 和 web::json::value::string 的区别
Difference between web::json::value::parse and web::json::value::string in Casablanca C++ REST SDK
我有一段代码看起来像这样(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 字符串。
后面的例子将returnàjson字符串包含"id": 1,"title": "test"
.
这基本上意味着您正在尝试解析未被识别为 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" }
return :
{"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 字符串.
对于 "value 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
};
我有一段代码看起来像这样(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 字符串。
后面的例子将returnàjson字符串包含"id": 1,"title": "test"
.
这基本上意味着您正在尝试解析未被识别为 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" }
return :
{"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 字符串.
对于 "value 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
};