是否可以将键/值对放置或添加到 boost::json::value 中,就像添加到 boost::json::object 中一样?
boost::json::object obj;
obj.emplace("timestamp", "2023-01-01T00:00:00");
是否存在某种简短的符号,比如这样?
boost::json::value val;
val["key"] = "value";
或者您是否需要显式创建一个 boost::json::object 来用于此类用途?
据我了解,boost::json::value是各种类型json数据的包装器,它的工作方式与std::variant类似吗?
据我了解,boost::json::value是各种类型json数据的包装器,它的工作方式与std::variant类似吗?
是的。请参阅此处的界面:https://www.boost.org/doc/libs/1_86_0/libs/json/doc/html/json/dom/value.html
直接分配可以是:
val = {"key", "value"}; // ["key":"value"]
val = { {"key", "value"} }; // {"key":"value"}
val = {
{"key", "value"},
{"key2", 42},
{"key3", true},
}; // {"key":"value","key2":42,"key3":true}
as_object()
,例如
val.as_object().emplace("more", val);
演示程序:Live On Coliru
#include <boost/json.hpp>
#include <iostream>
namespace json = boost::json;
int main()
{
json::value val;
val = {"key", "value"}; std::cout << val << std::endl;
val = {{"key", "value"}}; std::cout << val << std::endl;
val = {
{"key", "value"},
{"key2", 42},
{"key3", true},
};
std::cout << val << std::endl;
val.as_object().emplace("more", val);
std::cout << val << std::endl;
val.at("more").as_object().emplace("more", val);
std::cout << val << std::endl;
val.at("more").emplace_null();
std::cout << val << std::endl;
}
打印
["key","value"]
{"key":"value"}
{"key":"value","key2":42,"key3":true}
{"key":"value","key2":42,"key3":true,"more":{"key":"value","key2":42,"key3":true}}
{"key":"value","key2":42,"key3":true,"more":{"key":"value","key2":42,"key3":true,"more":{"key":"value","key2":42,"ke
y3":true,"more":{"key":"value","key2":42,"key3":true}}}}
{"key":"value","key2":42,"key3":true,"more":null}