Search code examples
c++jsonqtqt5qjson

QJsonDocument::toJson() generates extra large text. Is there way to fix it?


I have made class that convert QList<qreal> (very big list) to JSON string, but it generates a extra large text.

Here is code:

QJsonObject rootObject;
rootObject.insert("Test",0.05);
qDebug()<<QJsonDocument(rootObject).toJson(QJsonDocument::Compact);

And I have tried equal code:

QJsonObject rootObject;
rootObject.insert("Test",QString("0.05").toDouble());
qDebug()<<QJsonDocument(rootObject).toJson(QJsonDocument::Compact);

And debug ouptut is always:

{"Test":0.050000000000000003}

I want to get short output like this:

{"Test":0.05}

Is there way to fix QJsonDocument? Or make some decimals count rounding/limit?


Solution

  • On OS X I tried the following: -

    QVariant d(0.5);
    QJsonValue val = QJsonValue::fromVariant(d);
    
    qDebug() << val.toDouble();
    

    This prints out 0.5, as expected.

    However, I think the problem is due to floating point precision. QJSonDocument is representing the number as accurately as possible, but does not have a function to limit the number of decimal places represented, as is present in QString.

    Though not ideal, if your really want 0.5 represented this way, you can write a string value instead of the double.