使用json lib创建json字符串

时间:2017-03-22 15:47:00

标签: c++ c json string

我正在使用jsonc-libjson创建一个json字符串,如下所示。

{ "author-details": {
        "name" : "Joys of Programming",
        "Number of Posts" : 10
    }
}

我的代码如下所示

json_object *jobj = json_object_new_object();
json_object *jStr1 = json_object_new_string("Joys of Programming");
json_object *jstr2 = json_object_new_int("10");
json_object_object_add(jobj,"name", jStr1 );
json_object_object_add(jobj,"Number of Posts", jstr2 );

这给了我json字符串

{
 "name" : "Joys of Programming",
    "Number of Posts" : 10
}

如何添加与作者详细信息相关的顶部?

3 个答案:

答案 0 :(得分:1)

用旧广告来解释," libjson用户宁可打架而不是转换。"

至少我认为你必须喜欢与图书馆作战。使用nlohmann's JSON library,您可以使用以下代码:

nlohmann::json j {
    { "author-details", {
            { "name", "Joys of Programming" },
            { "Number of Posts", 10 }
        }
    } 
};

至少对我而言,这似乎更简单,更具可读性。

解析同样简单明了。例如,假设我们有一个名为somefile.json的文件,其中包含上面显示的JSON数据。要阅读和解析它,我们可以这样做:

nlohmann::json j;

std::ifstream in("somefile.json");

in >> j;   // Read the file and parse it into a json object

// Let's start by retrieving and printing the name.
std::cout << j["author-details"]["name"];

或者,我们假设我们找到了一个帖子,所以我们想增加帖子的数量。这是一个事情变得不那么有品味的地方 - 我们不能像我们一样直接增加价值;我们必须获取值,添加一个,然后分配结果(就像我们在缺少++的较小语言中那样):

j["author-details"]["Number of Posts"] = j["author-details"]["Number of Posts"] + 1;

然后我们要写出结果。如果我们想要它&#34;密集&#34; (例如,我们将通过网络传输它以供其他机器阅读)我们可以使用<<

somestream << j;

另一方面,我们可能希望对其进行漂亮打印,以便人们可以更轻松地阅读它。该库尊重我们使用setw设置的宽度,因此要使用4列制表位缩进打印,我们可以这样做:

somestream << std::setw(4) << j;

答案 1 :(得分:0)

创建一个新的JSON对象,并添加您已经创建的子对象。

只需在您已经写完之后插入这样的代码:

json_object* root = json_object_new_object();
json_object_object_add(root, "author-details", jobj); // This is the same "jobj" as original code snippet.

答案 2 :(得分:0)

根据Dominic的评论,我能够找到正确的答案。

json_object *jobj = json_object_new_object();
json_object* root = json_object_new_object();
json_object_object_add(jobj, "author-details", root);
json_object *jStr1 = json_object_new_string("Joys of Programming");
json_object *jstr2 = json_object_new_int(10);
json_object_object_add(root,"name", jStr1 );
json_object_object_add(root,"Number of Posts", jstr2 );