QJsonValue toDouble() conversion generates wrong values causing data loss.
QJsonObject obj;
obj.insert("dbl",double(73183493944884961));
double d = obj.value("dbl").toDouble();
qulonglong ul = d;
qulonglong ul2 = 73183493944884961;
qDebug () << ul << ul2;
Output:
73183493944884960 73183493944884961
toDouble() means it returns a double (that you cast to qulonglong then) which is inherently a precision loss. You can easily figure this out without involving json into this, by printing out this:
#include <QDebug>
int main()
{
qulonglong ul2 = double(73183493944884961);
qDebug() << ul2;
return 0;
}
g++ -fPIC -I/usr/include/qt -I/usr/include/qt/QtCore -lQt5Core main.cpp && ./a.out
73183493944884960