On 17/05/16 12:02, Larry Martell wrote:
On Mon, May 16, 2016 at 7:53 PM, Hamish Moffatt
<ham...@risingsoftware.com> wrote:
On 17/05/16 08:24, Larry Martell wrote:
I've see a lot of code that does something like this:

      QJsonDocument document = QJsonDocument::fromJson(jsonData);
      QJsonObject object = document.object();
      QJsonValue value = object.value("capData");

But I don't want to hard code the keys - I want to pick up and store
whatever happens to be in the JSON file. How can I iterate through it
and do that?

Also, what would be the best object to store this in so I can later
access it as I want to?

QJsonObject has iterator methods, and for each value you can check if it is
itself an array or an object or a simple type (QJsonValue::isArray(),
isObject(), isString() etc).

As for another object, I can't think of another with this flexibility. Why
not leave it in the QJson* objects?
My JSON file looks like this:


{
    "capData": {
       "host": "foo.bar.com",
       "initial_port": "8000"
       "secondary_port": "8001"
    },
    "django": {
       "host": "baz.bar.com",
       "port": "8004"
    }
}


My code looks like this:


   QFile file(QCoreApplication::applicationDirPath() + "/" + CONFIG_PATH);
   QByteArray val;
   QJsonDocument config_json;
   QJsonObject config;

   if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
     val = file.readAll();
     file.close();
     config_json = QJsonDocument::fromJson(val);
     config = config_json.object();
     QJsonValue value = config.value("capData");
     QJsonArray array = value.toArray();
     foreach (const QJsonValue & v, array)
         qWarning() << v.toObject().value("host").toString();
   }

I never enter my foreach loop, so I wrote out each variable with qWarning().

When I print out val it has:

"{\n   \"capData\": {\n      \"host\": \"foo.bar.com\",\n
\"initial_port\": \"8000\"\n      \"secondary_port\": \"8001\"\n
},\n   \"django\": {\n      \"host\": \"baz.bar.com\",\n
\"port\": \"8004\"\n   }\n}\n"

But when I print out config_json I get:

QJsonDocument()

Your JSON is invalid - you're missing a comma on the end of the initial_port line. config_json.isEmpty() is true as a result, and isObject() is false.


Hamish
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to