初识Json
json是一种轻量级数据交换格式。json完全独立于语言的文本格式,但是使用了类似于C语言的的家族习惯。
常用的json库:
- JsonCpp:一个用c++处理josn的开发包:
- cJson
一个超轻巧,携带方便,单文件,简单的可作为ANSI-C标准的Json解析器
- QJson
QJson是Qt自带的开发包,可以将JSon数据解析为QVariant对象,JSon的数组将被映射为QVariantList实例,而其他对象映射为QVaraintMap实例。
下面是一个Json文档例子
接下来,我们使用QJon解析上述json文本:
QJson::Parser parser;bool ok;QString json("{""\"encoding\" : \"UTF-8\",""\"plug-ins\" : [""\"python\",""\"c++\",""\"ruby\"""],""\"indent\" : { \"length\" : 3, \"use_space\" : true }""}");QVariantMap result = parser.parse(json.toUtf8(), &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() << "\t-" << plugin.toString();}QVariantMap nestedMap = result["indent"].toMap();qDebug() << "length:" << nestedMap["length"].toInt();qDebug() << "use_space:" << nestedMap["use_space"].toBool();
生成JSon对象
如果需要将
QVariant生成 JSON 对象,我们则使用QJson::Serializer对象
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;bool ok;QByteArray json = serializer.serialize(people, &ok);if (ok) {qDebug() << json;} else {qCritical() << "Something went wrong:" << serializer.errorMessage();}
补充
上面是 QJson 的主要使用方法。其实 QJson 还提供了另外一个类QObjectHelper,用于QVariant和QObject之间的转换。注意我们上面所说的 QJson 的转换需要的是QVariant类型的数据,无论是转换到 JSON 还是从 JSON 转换而来。但是通常我们在应用程序中使用的是QObject及其子类。QObjectHelper提供了一个工具函数,完成QVariant和QObject之间的转换。例如我们有下面的类:
那么,我们可以使用下面的代码将Person类进行 JSON 序列化:
以及:

浙公网安备 33010602011771号