PDA

View Full Version : converting list to JSON - performance issue.



Mathan
28th September 2016, 17:31
Hi,

I want to pass the PortalSearchItems list to be passed from qml to Cpp. Eventhough, I can get the result, app got just killed, when this code executes. I assume performance issue.

Code Snippet: main.qml
--------------------------------------


var varidPortalSearchItemsCount = idPortalSearchItems.totalResults;

var vartextJson = "";

for (var ii = 0; ii <= varidPortalSearchItemsCount -1 ;ii++)
{
vartextJson += '{"title":"'+ idPortalSearchItems.results[ii].title +'"
,"owner":"'+ idPortalSearchItems.results[ii].owner +'"
,"url":"'+ idPortalSearchItems.results[ii].url +'"
,"itemId":"'+ idPortalSearchItems.results[ii].itemId +'"
}' + ',';
}


vartextJson = vartextJson.substring(0, vartextJson.length-1) + ']';
vartextJson = '[' + vartextJson;
var varJsonString =JSON.parse(vartextJson);
objHomeController.eveWriteXML(varJsonString);


HomeController.h
--------------------------

Q_INVOKABLE bool eveWriteXML(const QJsonObject &pqvarPortalItemResult);


HomeController.cpp
--------------------------


bool HomeController::eveWriteXML(const QJsonObject &pqvarPortalItemResult)
{

QVariantMap jsonQVariantMap = pqvarPortalItemResult.toVariantMap();



for(QVariantMap::const_iterator iter = jsonQVariantMap.begin(); iter != jsonQVariantMap.end(); ++iter) {

QVariant objQVariant = iter.key();
QVariant objQVariant1 = iter.value();

QString strTitleValue = objQVariant1.toMap().values("title").value(0).toString();
QString strUrlValue = objQVariant1.toMap().values("url").value(0).toString();
QString strOwnerValue = objQVariant1.toMap().values("owner").value(0).toString();
QString strItemIdValue = objQVariant1.toMap().values("itemId").value(0).toString();

}

Thanks In advance.

anda_skoa
29th September 2016, 10:07
A lot of processing in QML but your choice to do that.

One thing you could avoid in the C++ code it to convert objQVariant1 into a map several times.
And calling just value(key) instead of values(key).value(0)

Also "I assume performance issue" is a no-go. Never assume, always measure.

Cheers,
_

Mathan
29th September 2016, 17:12
Hi,

for(QVariantMap::const_iterator iter = jsonQVariantMap.begin(); iter != jsonQVariantMap.end(); ++iter) {

QVariant objQVariant = iter.key();//Gives the value of Iteration - 0,1....

calling just value(key)

Some code snippet Please.

anda_skoa
30th September 2016, 11:39
QVariant objQVariant = iter.key();//Gives the value of Iteration - 0,1....

No, gives the key of the iteration.
Actually a QString.



calling just value(key)

Some code snippet Please.
Really? You need a code snippet for a single method call on an object?


map.value("title");


Cheers,
_