QT5处理 json 总结

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;
    }

 

你可能感兴趣的:(QT)