【发布时间】:2019-05-17 08:15:01
【问题描述】:
我使用常用的 AddMember() 方法制作了一个包含所有对象和值的 rapidjson 文档。现在我想从该文档中获取字符串以发布到 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() 以这种方式应用于整个文档
我想获得与第一个代码示例相同的输出,但使用由第二个源代码制作的文档。我如何告诉作者以不同的方式格式化每个成员?
【问题讨论】:
标签: formatting rapidjson