Json官方文档
Qt关于Json的操作有如下几个类:
QJsonArray
QJsonObject
QJsonDocument
json有两个数据结构 :数组与对象
json的对象与数组可以层层嵌套组成复杂的数据结构
例子
#include <QCoreApplication>
#include <QFile>
#include <QTextStream>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
{
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;
QJsonDocument jsonDocument = QJsonDocument::fromVariant(people);
QByteArray byte_array = jsonDocument.toJson();
QFile file("./test1.js");
file.open(QIODevice::WriteOnly);
QTextStream stream(&file);
stream << byte_array << "\r\n";
file.flush();
file.close();
QJsonParseError ParseError;
QJsonDocument praseDoc = QJsonDocument::fromJson(byte_array,&ParseError);
if(ParseError.error == QJsonParseError::NoError)
{
if(praseDoc.isArray())
{
QJsonArray array = praseDoc.array();
for(int i = 0 ; i < array.size(); i++)
{
QVariantMap result = array.at(i).toVariant().toMap();
for(QVariantMap::iterator iter = result.begin();iter != result.end();iter++)
{
QString key = iter.key();
QVariant value = iter.value();
qDebug()<<key<<value.toString();
}
}
qDebug()<<"/other method/";
for(int i = 0 ; i < array.size(); i++)
{
QJsonObject obj = array.at(i).toObject();
qDebug()<<obj.value("Name").toString()<<obj.value("Phonenumber").toInt();
}
}
}
}
qDebug()<<"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@";
{
QJsonObject json_object1;
json_object1.insert("ID", "1263");
json_object1.insert("Name", "lin");
json_object1.insert("age", 20);
QJsonObject json_object2;
json_object2.insert("ID", "2345");
json_object2.insert("Name", "jin");
json_object2.insert("age", 5);
QJsonArray json_array;
json_array.insert(0,json_object1);
json_array.insert(1,json_object2);
QByteArray byte_array = QJsonDocument(json_array).toJson();
QJsonArray json_array2 = QJsonDocument::fromJson(byte_array).array();
for(int i = 0; i < json_array2.size(); ++i)
{
QJsonObject json = json_array2.at(i).toObject();
qDebug() << json.value("ID").toString();
qDebug() << json.value("Name").toString();
qDebug() << json.value("age").toInt();
}
QFile file("./test2.js");
file.open(QIODevice::WriteOnly);
QTextStream stream(&file);
stream <<byte_array<<"\r\n";
file.flush();
file.close();
}
qDebug()<<"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@";
{
QString json("{"
"\"encoding\" : \"UTF-8\","
"\"plug-ins\" : ["
"\"python\","
"\"c++\","
"\"ruby\""
"],"
"\"indent\" : { \"length\" : 3, \"use_space\" : true }"
"}");
QJsonParseError error;
QJsonDocument jsonDocument = QJsonDocument::fromJson(json.toUtf8(), &error);
if (error.error == QJsonParseError::NoError)
{
if (jsonDocument.isObject())
{
QVariantMap result = jsonDocument.toVariant().toMap();
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();
}
}
QByteArray byte_array = jsonDocument.toJson();
QFile file("./test3.js");
file.open(QIODevice::WriteOnly);
QTextStream stream(&file);
stream << byte_array<<"\r\n";
file.flush();
file.close();
}
qDebug()<<"@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@";
{
QJsonObject person;
person.insert("ID", "1263");
person.insert("Name", "lin");
person.insert("age", 20);
QJsonObject company;
company.insert("Name", "HH CO.LMT");
company.insert("Location", "guangzhou");
company.insert("businss", "med");
QJsonObject json_object;
json_object.insert("person", QJsonValue(person));
json_object.insert("company", QJsonValue(company));
QByteArray byte_array = QJsonDocument(json_object).toJson();
QJsonParseError ParseError;
QJsonDocument praseDoc = QJsonDocument::fromJson(byte_array,&ParseError);
if(ParseError.error == QJsonParseError::NoError)
{
if(praseDoc.isObject())
{
QJsonObject objs = praseDoc.object();
QVariantMap result = objs.value("company").toVariant().toMap();
qDebug()<< result["Location"].toString();
qDebug()<< result["Name"].toString();
qDebug()<< result["businss"].toString();
result = objs.value("person").toVariant().toMap();
qDebug()<< result["ID"].toString();
qDebug()<< result["Name"].toString();
qDebug()<< result["age"].toString();
}
}
QFile file("./test4.js");
file.open(QIODevice::WriteOnly);
QTextStream stream(&file);
stream << byte_array<<"\r\n";
file.flush();
file.close();
}
return a.exec();
}
以上代码 在QT5.4下编译通过