QT and JSON array
-
Hi am new to the QT GUI development environment,
Am facing an issue with the following snippet.
All the necessary header files are included.QJsonDocument doc1;
doc1 = QJsonDocument::fromJson("{ "
" "Fruit_Parameters": "
" { "
" "Colour": Green, "
" "Quantity": "350", "
" "Origin": "India", "
" "cat_ID": "00498D4AC", "
" "Member_Id": "XYZ", "
" "Business-cat": "Food", "
" "Availablity": "yes" "
" }, "
" "
" "Sender": "ABC", "
" "
""Destination": "DEF" "
" "
" }");
QByteArray data = doc1.toJson();
QString jsonString = doc1.toJson(QJsonDocument::Compact);
qDebug() << jsonString;This works perfect, however am getting the output in the following order.
- Sender : ABC
2.Fruit parameters :{{ "
" "Colour": Green, "
" "Quantity": \350"", "
" "Origin": "India", "
" "cat_ID": "00498D4AC", "
" "Member_Id": "XYZ", "
" "Business-cat": "Food", "
" "Availablity": "yes" "
} - "Destination":"DEF" "
I have to send exact format of the json array in the above code snippet to server. Basically the order of the json array changes when i build the project.
Thank you in advance ,
cnag - Sender : ABC
-
You do not have any array in your JSON code. An array is wrapped in square brackets:
[ ]
. What you pasted above are JSON objects, which - by definition - are in random order.Use arrays and the order will be preserved.
-
@cnag said in QT and JSON array:
however am getting additional [] brackets in the console output
What does this mean?
qDebug()
output? That may show[]
around lists/arrays. Find out what the actual string is in the text generated/sent, not what might show in a console depending on what you are doing. -
Hello @JonB ,Yes am talking about qDebug() output.
This is what i really meant." [ \n {\n "Fruit-parameters": [ \n {\n "colour": Green\n },\n {\n "Quantity": "350"\n },\n {\n "Origin": "india"\n },\n {\n "cat-ID": "00498D4AC"\n },\n {\n "Member-Id": "XYZ"\n },\n {\n "Business-cat": "Food"\n }\n ] \n },\n {\n "Sender": "ABC"\n },\n {\n "Destination": "DEF"\n }\n ] \n"
Due to these [] around the array , am getting a response as "Invalid Data format " from the server. Is it the behavior of Qjsonarray ???
If i use the Qjsonobject am getting alphabetical order response in qDebug() output .(1. fruit_parameters 2. Destination 3.Sender).
so i had gone with Qjsonarray .Thanks in advance
-
@cnag
You asked for the object keys' order to be preserved. As a result @sierdzio told you to put them in an array so as to retain order. However, clearly your receiver is not going to accept an array when it expects a list of objects. So you should not serialize/send the whole array as an array, you should iterate through the elements and only send them. Or, if that is problematic, you can always strip the leading & trailing[
&]
off the generated JSON string before sending it. Then it won't arrive as an array.Having said the above, there should be no need to preserve the object order in the JSON in the first place. JSON objects are unordered, and your consumer should surely accept that, else it's not accepting proper JSON. So why you want to do this ordering is beyond me, but that's what you want to do if you want to preserve the order.
-