使用rapidjson解析json时,是否有办法获取double值的基础字节。
请看下面的代码:
string temp_json2 = "{\"byte_size\":1000.3}";
rapidjson::Document doc;
doc.Parse<0>(temp_json2.c_str());
rapidjson::Value::ConstMemberIterator iter = doc.MemberBegin();
const rapidjson::Value& key = iter->name;
std::cout << key.GetString() << " = ";
const rapidjson::Value& val = iter->value;
std::cout << val.GetDouble();
我希望得到像
这样的东西val.GetRawString();而不是val.GetDouble();
我需要的原因是我不想在转换过程中丢失任何精度。请注意,我没有选择修改json以将引号括在double值附近。
答案 0 :(得分:1)
目前没有。
我正在研究一个“全精度”解析选项(很长一段时间),它可以精确地将字符串解析为double
。使用grisu2算法已经精确地double
到字符串转换。但是如果一个字符串不能用double
精确表示,那么它仍然会失去一些精确度。
为了支持您的要求,可能需要添加解析选项,并更改SAX和DOM接口。如果您希望实施此功能,请报告here以进一步讨论。
答案 1 :(得分:0)
看起来有可能:
{
"hash": "00000000206d413bdd4d020a7df959176440e7b52f120f3416db11cb26aaaa8f",
"bigint": 13671375398414879143589706241811147679151753447299444772946167816777,
"time": "1551597576",
"special": false
}
rapidjson::Document document;
document.Parse<rapidjson::kParseNumbersAsStringsFlag>( JSONmessage );
std::cout << document["hash"].GetString() << std::endl;
std::cout << document["bigint"].GetString() << std::endl;