是否可以将键值对放入 boost::json::value 中?

问题描述 投票:0回答:1

是否可以将键/值对放置或添加到 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类似吗?

c++ json boost
1个回答
0
投票

据我了解,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}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.