2016-11-27 765 views
1

rapidjson documentation我能够产生一个漂亮的打印输出中JSON的关键,通过密钥方法书面方式,如:rapidjson漂亮的打印使用JSON字符串作为输入到作家

rapidjson::StringBuffer s; 
rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(s);  

writer.StartObject(); 
writer.Key("hello"); 
writer.String("world"); 
writer.EndObject(); 

std::string result = s.GetString(); 

然而,我想要做同样的事情,但是使用JSON字符串(即std::string对象,其内容是有效的JSON)为作者提供内容,而不是调用Key(),String()等等。

寻找到PrettyWriter API我没有看到任何方法传递一个JSON字符串的方式。另一种方法是将解析的JSON字符串作为rapidjson::Document对象传递,但我没有发现这种可能性。

有关如何完成这一任务的任何想法吗?

+1

现在'Writer'接口上有一个['RawValue'函数](http://rapidjson.org/classrapidjson_1_1_pretty_writer.html#a3136e3426a5d06e5da50f6e6aab8a5be),它会完成这个任务,但不幸的是它现在(rapidjson 1.1.0 )与'PrettyWriter'不能可靠地工作。 – ComicSansMS

回答

3

这是从他们的文档:

// rapidjson/example/simpledom/simpledom.cpp` 
#include "rapidjson/document.h" 
#include "rapidjson/writer.h" 
#include "rapidjson/stringbuffer.h" 
#include <iostream> 

using namespace rapidjson; 

int main() { 
    // 1. Parse a JSON string into DOM. 
    const char* json = "{\"project\":\"rapidjson\",\"stars\":10}"; 
    Document d; 
    d.Parse(json); 

    // 2. Modify it by DOM. 
    Value& s = d["stars"]; 
    s.SetInt(s.GetInt() + 1); 

    // 3. Stringify the DOM 
    StringBuffer buffer; 
    Writer<StringBuffer> writer(buffer); 
    d.Accept(writer); 

    // Output {"project":"rapidjson","stars":11} 
    std::cout << buffer.GetString() << std::endl; 
    return 0; 
} 

我假设你需要#3?