Я сделал быстрый документ со всеми моими объектами и значениями, используя обычный метод AddMember (). Теперь я хочу получить строку из этого документа для публикации в брокере mqtt. Но внутри этой строки некоторые члены должны иметь 2 десятичных знака, некоторые только одно, а другие все десятичные.
Я не могу найти, как установить десятичное место для конкретного члена после полной сборки документа.
Мне удалось это сделать, собрав мой документ json с писателем, но это не то, что я хочу сделать, потому что этот документ не может быть легко изменен:
#include <string>
#include <iostream>
#include <sstream>
#include <rapidjson/document.h> // rapidjson's DOM-style API
#include <rapidjson/prettywriter.h> // for stringify JSON
#include <rapidjson/stringbuffer.h>
using namespace rapidjson;
using namespace std;
int main (int argc, char* argv[])
{
Document doc;
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
writer.StartObject();
writer.Key("member1");
writer.SetMaxDecimalPlaces(2);
writer.Double(1.0000001);
writer.Key("member2");
writer.SetMaxDecimalPlaces(3);
writer.Double(3.123456);
writer.Key("member3");
writer.SetMaxDecimalPlaces(8);
writer.Double(2.123456);
writer.EndObject();
cout << buffer.GetString() << endl;
return 0;
}
./decimal
{"member1":1.0,"member2":3.123,"member3":2.123456}
Теперь вот как я строю свой документ:
#include <string>
#include <iostream>
#include <sstream>
#include <rapidjson/document.h> // rapidjson's DOM-style API
#include <rapidjson/prettywriter.h> // for stringify JSON
#include <rapidjson/stringbuffer.h>
using namespace rapidjson;
using namespace std;
int main (int argc, char* argv[])
{
Document doc;
Document::AllocatorType& allocator = doc.GetAllocator();
StringBuffer buffer;
Writer<StringBuffer> writer(buffer);
doc.SetObject();
doc.AddMember("member1", 1.0000001, allocator);
doc.AddMember("member3", 3.123456, allocator);
doc.AddMember("member2", 2.123456, allocator);
writer.SetMaxDecimalPlaces(2);
doc.Accept(writer);
cout << buffer.GetString() << endl;
return 0;
}
./decimal
{"member1":1.0,"member2":2.12,"member3":3.12}
SetMaxDecimalPlaces () применяется ко всему документу таким образом
Я хотел бы получить тот же вывод, первый пример кода, но с использованием документа, созданного из второго исходного кода. Как я могу сказать автору по-разному форматировать каждого члена?