在rapidjson解析中获取double值的原始字符串(或字节)?

时间:2014-11-14 19:44:03

标签: c++ rapidjson

使用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值附近。

2 个答案:

答案 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;

来源:https://github.com/Tencent/rapidjson/issues/1458