使用/ operator使用jsoncpp库创建JSON字符串时出错

时间:2015-09-03 10:14:41

标签: c++ json jsoncpp

我正在使用JSONcpp库并面临问题来创建包含/运算符的json(如date:02/12/2015)。以下是我的代码:

JSONNODE *n = json_new(JSON_NODE);
json_push_back(n, json_new_a("String Node", "02/05/2015"));

json_char *jc = json_write_formatted(n);
printf("%s\n", jc);
json_free(jc);
json_delete(n);

输出

{
    "String Node":"02\/05\/2015"
}

在此处查看“\/”日期,我们只希望日期为“/”,因此我的预期输出应如下所示:

预期输出:

{
    "String Node":"02/05/2015"
}

如何摆脱它?我们使用内置的库函数,我们无法修改库。

1 个答案:

答案 0 :(得分:0)

根据this example

  

json_new_a 方法将在您转到时转义您的字符串值   写下最后的字符串。

您在输出中面临的其他反斜杠是添加转义字符的结果。这实际上是一件好事,因为它可以防止意外和故意的错误。

我认为你的easies选项是用单\/替换输出字符串中的所有/次出现。我写了一个简单的程序:

#include <iostream>
#include <string>
#include <boost/algorithm/string/replace.hpp>

using namespace std;

int main()
{
    //Here's the "json_char *jc" from your code
    const char* jc = "02\\/05\\/2015";

    //Replacing code
    string str(jc);
    boost::replace_all(str, "\\/", "/");

    //Show result
    cout << "Old output: " << jc << endl;
    cout << "New output: " << str << endl;
}

Live demo

BTW: libJSON实际上不是一个C ++库 - 它更多的C风格涉及许多低级操作,并且比更多的C ++ ish库更复杂和模糊。如果你想尝试,有一个很好的C ++ JSON库列表here