1

有没有办法在使用 rapidjson 解析 json 时获取双精度值的底层字节。

看下面的代码:

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 以将双引号括起来。

4

2 回答 2

1

目前没有。

我正在研究一个“全精度”解析选项(很长一段时间),它可以将字符串精确解析为double. 使用 grisu2 算法的double-to-string 转换已经很精确了。但是如果一个字符串不能double精确地表示,它仍然会失去一些精度。

为了支持您的要求,它可能需要添加解析选项,并更改 SAX 和 DOM 接口。如果您希望实现此功能,请在此处报告以进行进一步讨论。

于 2014-11-16T04:43:03.067 回答
1

看起来有可能:

{
    "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

于 2019-06-23T04:10:01.223 回答