1. 假设生成这样的json结构,并将其写入文件:
{
"北京市": {
"区1": "平谷区",
"区2": "海淀区",
"区3": "朝阳区"
},
"广西壮族自治区": "待续",
"河北省": {
"市1": "廊坊",
"市2": "张家口",
"市3": "石家庄"
}
}
对应源程序:
//1. 创建各个节点元素
QJsonObject obj;
QJsonObject json;
obj={{"区1", "平谷区"}, {"区2", "海淀区"}, {"区3", "朝阳区"}};
json.insert("北京市", obj);
obj={{"市1", "廊坊"}, {"市2", "张家口"}, {"市3", "石家庄"}};
json.insert("河北省", obj);
json.insert("广西壮族自治区", "待续");
QJsonDocument doc(json); //直接使用构造函数
QByteArray ba = doc.toJson(QJsonDocument::Indented);
qDebug("1. char*\n=%s", ba.data());
qDebug()<<"2. doc=\n"<
注意上述的【2. doc=】输出:
2. doc=
QJsonDocument({"北京市":{"区1":"平谷区","区2":"海淀区","区3":"朝阳区"},"广西壮族自治区":"待续","河北省":{"市1":"廊坊","市2":"张家口","市3":"石家庄"}})
2. 解析这个json:
if(doc.isObject())
{
QJsonObject obj = doc.object();
//当类型为object时:
if(obj.contains("北京市"))
{
QJsonValue val = obj.value("北京市");//或者take
if(val.isObject())
{
QJsonObject obj = val.toObject();
qDebug() << obj; //将该对象一次性打印出来
qDebug() << obj.value("区2").toString();//取出某一个值
}
}
//当类型为string时:
if(obj.contains("广西壮族自治区"))
{
qDebug() << obj.value("广西壮族自治区").toString();
}
//当类型为其他时,
//toArray toBool toInt toDouble......
}
3. 再从文件中读取,并恢复为json:
//4. 从文件中读出这个json,前面说过该文件为UTF-8编码
QFile file2("c:/1.json");
if(!file2.open(QIODevice::ReadOnly))
{
qDebug() << "读出失败!";
return 0;
}
ba = file2.readAll();
qDebug() << "读出的数据如下:";
qDebug() << ba;
QJsonParseError e;
QJsonDocument jsonDoc = QJsonDocument::fromJson(ba, &e);
if(e.error == QJsonParseError::NoError && !jsonDoc.isNull())
{
qDebug() <<"doc=\n"<< jsonDoc;
}