Rapidjson красиво печатает, используя строку 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() и так далее.

Глядя на 1_pretty_writer.html" rel="nofollow noreferrer">PrettyWriter API, я не вижу способа передать строку JSON таким образом. Альтернативой может быть передача проанализированной строки JSON как объекта rapidjson::Document, но я не нашел такой возможности.

Любая идея о том, как это можно сделать, пожалуйста?


person fgalan    schedule 27.11.2016    source источник
comment
Теперь в интерфейсе Writer есть функция RawValue, которая будет выполнять это, но, к сожалению, в настоящее время (rapidjson 1.1.0) не работает надежно с PrettyWriter.   -  person ComicSansMS    schedule 11.03.2017


Ответы (1)


Это из их документации:

// 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?

person Community    schedule 27.11.2016