【问题标题】:stringify with rapidjson使用 rapidjson 进行字符串化
【发布时间】:2012-11-02 17:23:42
【问题描述】:

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

当收到一个事件时,我的函数被调用:

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

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

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

我习惯了 jsonpp,我想我错过了一些愚蠢的东西。 问题很简单:如何对 const rapidjson 值进行字符串化?

【问题讨论】:

    标签: c++ json rapidjson


    【解决方案1】:

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

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

    由于 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();
    

    【讨论】:

    • 我已经修复了代码的第二部分,你有 FileStream,因为你必须复制并粘贴它。 rapidjson 在我的游戏项目中很棒。谢谢你,米洛。
    • 你能看看我的问题吗? Perform a copy of Document object of rapidjson
    猜你喜欢
    • 2016-01-22
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多