使用 C++ 中的函数动态创建 json 字符串

Posted

技术标签:

【中文标题】使用 C++ 中的函数动态创建 json 字符串【英文标题】:Create json string dynamically using a function in C++ 【发布时间】:2021-12-11 04:32:38 【问题描述】:

我想使用 C++ 函数创建一个 json 字符串,如下面的简单示例:

string createJson(string one, string two, string three, string four)

    boost::proprty_tree::ptree pt;
    std::stringstream ss;

    pt.put("one", one);
    pt.put("two", two);
    pt.put("three", three);
    pt.put("four", four);

    return ss.str();


int main()

    string jsonstr, tempstr;
    //assume one below are initialised any strings
    string one, two, three, four;
    for(i = 0; i < m; i++)
    
        tempstr = createJson(one, two, three, four);
        jsonstr.append(tempstr);
    
    cout << jsonstr << endl;
    
    return 0;

输出应该是正确的 json 格式。但是当所有循环运行时,我在某个地方得到了不正确的 json 格式。 json 需要从服务器发送到客户端应用程序,并且只能使用 json 格式处理。这是正确的做法吗?

请随意假设 json 值(int、string 等)。

【问题讨论】:

什么是jsonstr?那是图书馆的一部分吗? boost::property_tree的目的不是json...有专门的json库... 这段代码根本不输出任何东西。甚至没有数据流入ss。请发布您已验证的代码实际上会产生您所描述的现象。 proprty_tree 中甚至还有一个错字,所以你显示的代码不可能是你正在谈论的代码。 这可能是个问题,但我没有看到 ss 被写入。 nlohmann::json 是一个出色的仅标头 C++ json 库 【参考方案1】:

在显示的代码中,唯一缺少的行似乎是

write_json(ss, pt);

Live On Coliru

但是

使用合适的 JSON 库!

#include <boost/json.hpp>

std::string createJson(std::string const& one, std::string const& two,
                       std::string const& three, std::string const& four)

    return serialize(boost::json::object
        "one", one,
        "two", two,
        "three", three,
        "four", four,
    );


也可以看到Live On Coliru

【讨论】:

以上是关于使用 C++ 中的函数动态创建 json 字符串的主要内容,如果未能解决你的问题,请参考以下文章

R语言gganimate包创建可视化gif动图可视化动图:gganimate包创建动态线型图动画基于transition_time函数使用geom_point函数显示动画移动的数据点

R语言gganimate包创建可视化gif动图可视化动图:创建动态散点图动画基于transition_time函数使用shadow_wake函数配置动画的渐变效果(gradual falloff)

R语言gganimate包创建可视化gif动图可视化动图:gganimate包创建动态散点图动画基于transition_time函数使用shadow_mark函数将数据集对应的静态图作为背景图

VS2019 C++动态链接库的创建使用

video.js 使用数据库中的 json 创建动态播放列表

(C++) 创建可以从函数访问的动态全局数组/向量