2015-06-20 96 views
1

我正在使用j ++在C++中,並決定嘗試Jsoncpp。在我的JSON中,我有一些以科學計數法表示的值,並且包含4.0e-06等負指數。當我去解析這個json字符串時,我得到了奇怪的結果。圖書館似乎對積極指數正常工作,但在出現負號時失敗。Jsoncpp沒有正確讀取指數

下面是我用來測試這個json字符串的代碼的一個例子。

#include "json/json.h" 
#include <iostream> 
#include <string> 

using namespace std; 

int main(){ 

    string json_example = "{\"test\":4.0e-06, \"test2\":0.000004\"}"; 

    Json::Value json; 
    Json::Reader reader; 
    bool parsed = reader.parse(json_example, json, false); 

    cout << json.toStyledString() << endl; 


} 

這是我收到的輸出。

{ 
    "test" : 3.9999999999999998e-06, 
    "test2" : 3.9999999999999998e-06 
} 

我不能說這是否是庫中的錯誤或者我做錯了什麼。我曾嘗試使用Jsoncpp的舊版本,但仍然遇到同樣的問題。

感謝

回答

1

這不是JsonCpp的錯,只是表示double格式數量的問題。你可以自己去查:

double a, b, c, d, e, f; 
a = json["test"].asDouble(); // 3.9999999999999998e-006 
b = json["test2"].asDouble(); // 3.9999999999999998e-006 
c = boost::lexical_cast<double>("4.0e-06"); // 3.9999999999999998e-006 
d = boost::lexical_cast<double>("0.000004"); // 4.0000000000000007e-006 (!) 
sscanf("4.0e-06", "%lf", &e); // 3.9999999999999998e-006 
sscanf("0.000004", "%lf", &f); // 3.9999999999999998e-006 

...但奇怪的是,當我轉換回JSON字符串,我得到這個:

std::string test = json.toStyledString(); 

//{ 
// "test" : 4.000000000000000e-006, 
// "test2" : 4.000000000000000e-006 
//} 
+0

我明白了,我會嘗試與這個有點玩弄更多,看看我能否得到和你一樣的輸出。很高興知道它不是錯誤的圖書館。謝謝你的幫助。 – EMG

+1

您可以考慮解決此問題的[RapidJSON](http://stackoverflow.com/a/29878756/833188) – Sga