用rapidjson进行字符串化

时间:2012-11-02 17:23:43

标签: c++ json rapidjson

我正在使用socket.io-clientpp,https://github.com/ebshimizu/socket.io-clientpp,它使用rapidjson。

收到事件后,我的函数被调用:

void data_published(socketio::socketio_events&, const Value& v) {

值是rapidjson值。我的问题是我看到字符串化的唯一方法是使用Document类。 但是要将Value放在Document中,所有函数都采用非const引用,例如:

GenericValue& AddMember(const Ch* name, GenericValue& value, Allocator& allocator) {

我习惯了jsonpp,我猜想我有些傻了。 问题很简单:如何将const rapidjson值字符串化?

1 个答案:

答案 0 :(得分:13)

我是rapidjson的作者。谢谢你的问题。我在http://code.google.com/p/rapidjson/issues/detail?id=45

中记录了这个问题

这是因为GenericValue :: Accept()是非const的。

由于GenericValue :: Accept()只为处理程序生成事件,因此不需要修改值及其后代。所以应该改变:

template <typename Handler>
GenericValue& Accept(Handler& handler)

template <typename Handler>
const GenericValue& Accept(Handler& handler) const

您可以将其修补到您的rapidjson / document.h或下载最新版本(主干或0.1x分支)。

在此更改之后,您可以像在教程中一样对一个const值进行字符串输出:

const Value& v = ...;
FileStream f(stdout);
PrettyWriter<FileStream> writer(f);
v.Accept(writer);

或者字符串缓冲区:

const Value& v = ...;
StringBuffer buffer;
PrettyWriter<StringBuffer> writer(buffer);
v.Accept(writer);
const char* json = buffer.GetString();