• QJson


    http://qjson.sourceforge.net/usage/

    Usage

    This page provides a quick overview of QJson’s features:

    • parsing: from JSON to QVariant.
    • serializing: from QVariant to JSON.
    • QObject helper: dump and restore QObject’s attributes.

    For more details checkout QJson’s documentation.

    Parsing: from JSON to QVariant

    Converting JSON’s data to QVariant instance is really simple:

    1
    2
    3
    4
    5
    6
    7
    
    // create a Parser instance
    QJson::Parser parser;
    
    bool ok;
    
    // json is a QString containing the data to convert
    QVariant result = parser.parse (json, &ok);
    

    Suppose you’re going to convert this JSON data:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    {
      "encoding" : "UTF-8",
      "plug-ins" : [
          "python",
          "c++",
          "ruby"
          ],
      "indent" : { "length" : 3, "use_space" : true }
    }
    

    The following code would convert the JSON data and parse it:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    QJson::Parser parser;
    bool ok;
    
    QVariantMap result = parser.parse (json, &ok).toMap();
    if (!ok) {
      qFatal("An error occurred during parsing");
      exit (1);
    }
    
    qDebug() << "encoding:" << result["encoding"].toString();
    qDebug() << "plugins:";
    
    foreach (QVariant plugin, result["plug-ins"].toList()) {
      qDebug() << "	-" << plugin.toString();
    }
    
    QVariantMap nestedMap = result["indent"].toMap();
    qDebug() << "length:" << nestedMap["length"].toInt();
    qDebug() << "use_space:" << nestedMap["use_space"].toBool();
    

    The output would be:

    1
    2
    3
    4
    5
    6
    7
    
    encoding: "UTF-8"
    plugins:
      - "python"
      - "c++"
      - "ruby"
    length: 3
    use_space: true
    

    Serialization: from QVariant to JSON

    QVariant objects are converted to a string containing the JSON data.

    Let’s declare a QVariant object with some data to convert:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    QVariantList people;
    
    QVariantMap bob;
    bob.insert("Name", "Bob");
    bob.insert("Phonenumber", 123);
    
    QVariantMap alice;
    alice.insert("Name", "Alice");
    alice.insert("Phonenumber", 321);
    
    people << bob << alice;
    

    Now it’s time to create the Serializer:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    QJson::Serializer serializer;
    bool ok;
    QByteArray json = serializer.serialize(people, &ok);
    
    if (ok) {
      qDebug() << json;
    } else {
      qCritical() << "Something went wrong:" << serializer.errorMessage();
    }
    

    The output will be:

    1
    2
    
     "[ { "Name" : "Bob", "Phonenumber" : 123 },
        { "Name" : "Alice", "Phonenumber" : 321 } ]"
    

    It’s possible to tune the indentation level of the resulting string using the Serializer::setIndentMode() method.

    QObject helper

    QJson provides an helper class for dumping QObject’s attributes to a QVariant and for restoring QObject’s attributes from a QVariantMap.

    Let’s define a simple class inhereted from QObject:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    
    class Person : public QObject
    {
      Q_OBJECT
    
      Q_PROPERTY(QString name READ name WRITE setName)
      Q_PROPERTY(int phoneNumber READ phoneNumber WRITE setPhoneNumber)
      Q_PROPERTY(Gender gender READ gender WRITE setGender)
      Q_PROPERTY(QDate dob READ dob WRITE setDob)
      Q_ENUMS(Gender)
    
      public:
        Person(QObject* parent = 0);
        ~Person();
    
        QString name() const;
        void setName(const QString& name);
    
        int phoneNumber() const;
        void setPhoneNumber(const int phoneNumber);
    
        enum Gender {Male, Female};
        void setGender(Gender gender);
        Gender gender() const;
    
        QDate dob() const;
        void setDob(const QDate& dob);
    
      private:
        QString m_name;
        int m_phoneNumber;
        Gender m_gender;
        QDate m_dob;
    };
    

    Dump QObject’s attributes to JSON

    The following code will serialize an instance of Person to JSON:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    Person person;
    person.setName("Flavio");
    person.setPhoneNumber(123456);
    person.setGender(Person::Male);
    person.setDob(QDate(1982, 7, 12));
    
    QVariantMap variant = QObjectHelper::qobject2qvariant(&person);
    Serializer serializer;
    qDebug() << serializer.serialize( variant);
    

    The generated output will be:

    1
    
    { "dob" : "1982-07-12", "gender" : 0, "name" : "Flavio", "phoneNumber" : 123456 }
    

    Restore QObject’s attributes from JSON

    It’s also possible to initialize a QObject using the values stored inside of a QVariantMap.

    Suppose you have the following JSON data stored into a QString:

    1
    
    { "dob" : "1982-07-12", "gender" : 0, "name" : "Flavio", "phoneNumber" : 123456 }
    

    The following code will initialize an already allocated instance of Person using the JSON values:

    1
    2
    3
    4
    
    Parser parser;
    QVariant variant = parser.parse(json);
    Person person;
    QObjectHelper::qvariant2qobject(variant.toMap(), &person);
    
  • 相关阅读:
    【读书笔记】iOS-网络-使用推送通知
    【读书笔记】iOS-网络-测试与操纵网络流量
    【读书笔记】iOS-网络-底层网络
    【读书笔记】iOS-网络-优化请求性能
    【读书笔记】iOS-网络-保护网络传输
    【读书笔记】iOS-网络-错误处理的经验法则
    【读书笔记】iOS-网络-三种错误
    【读书笔记】iOS-网络-理解错误源
    【读书笔记】iOS-网络-解析响应负载
    【读书笔记】iOS-网络-负载
  • 原文地址:https://www.cnblogs.com/chinasoft/p/15217012.html
Copyright © 2020-2023  润新知