
рд╣рд╛рдп, рд╣реЗрдмреНрд░!
рдПрдХ рд╣рдм рдкрд░ рдЕрднреА рднреА QJson рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдерд╛ - Qt рдкрд░ JSON рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдФрд░ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдЙрдкрдХрд░рдгред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдХреНрдпреВрдЯреА рдПрдХреНрд╕рдПрдордПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдЕрддрд┐рд░реЗрдХ рдпрд╛ рдЕрддрд┐рд░реЗрдХ рд╣реИред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, JSON рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ QJ рдореЗрдВ JSON рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП QJson рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ, рдмрдирд╛рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ред
рдЪреЗрддрд╛рд╡рдиреА! рдпрд╣ рдкреЛрд╕реНрдЯ рдПрдХ рдиреЛрдЯ рд╣реИред рдпрд╣рд╛рдВ рдЖрдк рдЬреЛ рднреА рдкрдврд╝рддреЗ рд╣реИрдВ, рд╡рд╣ Google рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рдСрдл рд╕рд╛рдЗрдЯ рдкрд░ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдПрдХ рдиреЛрдЯ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
рд╕реНрд╡рд╛рдЧрдд
QJson - 3rd рдкрд╛рд░реНрдЯреА, рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдФрд░ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рджреЛ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ -
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдпрд╛
рд╕рд░рд╕ рдХреЗ рд╕рд╛рдеред рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ, рдЕрдирдкреИрдХ рдХрд░реЗрдВ рдФрд░ рдЕрдЧрд▓реЗ рдЪрд░рдг рдкрд░ рдЬрд╛рдПрдВред
рд╕реНрдерд╛рдкрдирд╛
QJson рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реАрдореЗрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВред
рд╡рд┐рдВрдбреЛрдЬ
set PATH=%PATH%;C:\path_to_cmake_\bin cd path_where_i_unpacked_qjson cd build cmake -G "MinGW Makefiles" .. mingw32-make mingw32-make install
рд▓рд┐рдирдХреНрд╕ / рдореИрдХ
cd where_i_downloaded_qjson mkdir build cd build cmake .. make sudo make install
рд╢реБрд░реБрдЖрдд рд╣реЛ рд░рд╣реА рд╣реИ
QJson рдЖрдкрдХреЛ QVariant (QVariantMap, QVariantList) рдкрд░ рдЖрдзрд╛рд░рд┐рдд JSON рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд▓рдЪреАрд▓рд╛рдкрди рджреЗрддрд╛ рд╣реИред рд╡рд╣ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛, JSON рд▓рд┐рдЦрдирд╛ рдФрд░ QObjects рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - .pro рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрди рдЬреЛрдбрд╝реЗрдВ:
LIBS += -lqjson
рдЕрдм рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ qjson рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ рдФрд░ рдпрд╣ рдЬрд╛рдирддреА рд╣реИ рдХрд┐ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред
рдкрд░рд╕рд┐рдо QJson
#include<qjson/parser.h> QVariant parseJSON(const QString &json) { QJson::Parser parser; // json' bool ok; // false return parser.parse (json, &ok); // QVariant }
рдЖрдЗрдП рд╣рдо рдЗрд╕ JSON рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ:
{ "encoding" : "UTF-8", "plug-ins" : [ "python", "c++", "ruby" ], "indent" : { "length" : 3, "use_space" : true } }
рдпрд╣рд╛рдБ рдпрд╣ рдХреЛрдб рд╣реИ:
QJson::Parser parser; bool ok; QVariantMap result = parser.parse (json, &ok).toMap(); if (!ok) { qFatal(" - -."); exit (1); } qDebug() << "encoding:" << result["encoding"].toString(); qDebug() << "plugins:"; foreach (QVariant plugin, result["plug-ins"].toList()) { qDebug() << "\t-" << plugin.toString(); } QVariantMap nestedMap = result["indent"].toMap(); qDebug() << "length:" << nestedMap["length"].toInt(); qDebug() << "use_space:" << nestedMap["use_space"].toBool();
рдбреАрдмрдЧ рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдЧрд╛:
encoding: "UTF-8" plugins: - "python" - "c++" - "ruby" length: 3 use_space: true
QVariant рд╕реЗ JSON рддрдХ рд▓реЗрдЦрди
рдореИрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдпрд╣рд╛рдБ рдЫреЛрдбрд╝ рджреВрдБрдЧрд╛:
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; QJson::Serializer serializer; QByteArray json = serializer.serialize(people); qDebug() << json;
рдбреАрдмрдЧ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЖрдЙрдЯрдкреБрдЯ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
"[ { "Name" : "Bob", "Phonenumber" : 123 }, { "Name" : "Alice", "Phonenumber" : 321 } ]"
рдорд╣рд╛рди, рд╣реИ рдирд╛?
QObject рдХреНрд░рдордмрджреНрдзрддрд╛
JSON рдореЗрдВ рдПрдХ QObject рдЙрджрд╛рд╣рд░рдг рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред рд╕рднреА рд╡рд░реНрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЧреБрдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рд╡рд░реНрдЧ рдкрд░рд┐рднрд╛рд╖рд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
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; };
рдпрд╣ рдХреЛрдб рд╡реНрдпрдХреНрддрд┐ рд╡рд╕реНрддреБ рдХреЛ JSON рдореЗрдВ рдмрджрд▓ рджреЗрдЧрд╛:
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);
рдХрдВрд╕реЛрд▓ рдирд┐рдореНрди рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛:
{ "dob" : "1982-07-12", "gender" : 0, "name" : "Flavio", "phoneNumber" : 123456 }
JO рдХреЛ QObject рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред рдХрд▓реНрдкрдирд╛ рдХреАрдЬрд┐рдП рдХрд┐ рдЙрдкрд░реЛрдХреНрдд JSON рдХреБрдЫ QString рдореЗрдВ рд╣реИред
Parser parser; QVariant variant = parser.parse(json);
рдкреВрд░реНрдг рдПрдкреАрдЖрдИ
рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ
рдпрд╣рд╛рдБ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рд╡рд░реНрдгрд┐рдд
рд╣реИ ред
рдореЗрд░реА рдЯрд┐рдкреНрдкрдгреА
рдЗрд╕рд╕реЗ рдХрд┐рд╕реЗ рдлрд╛рдпрджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ? рд╣рд╛рдБ, рдХреЛрдИ рднреА! рдХреЛрдИ рднреА рдбреЗрд╡рд▓рдкрд░ рдЬрд┐рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдЖрд╕рд╛рди рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред