2016-11-27 760 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?