0
点赞
收藏
分享

微信扫一扫

QJsonObject乱码问题

janedaring 2022-04-02 阅读 52

QJsonObject读出json文件使用中文字符串作为key出现乱码问题

    QString m_jsonFile("~/untitled/templates.json");
    QJsonObject m_jsonRoot;

    QJsonDocument jsonDocument;
    QFile jsonFile(m_jsonFile);
    if (!jsonFile.exists()) {
        return;
    }
    jsonFile.open(QIODevice::ReadOnly);
    if (!jsonFile.isOpen()) {
        return;
    }

    QByteArray ba = jsonFile.readAll();

    QJsonParseError error;
    jsonDocument = QJsonDocument::fromJson(ba, &error);
    m_jsonRoot = jsonDocument.object();
    QJsonObject userNode = m_jsonRoot.value(USERTEMPLATES).toObject();
    QJsonObject userNode = userNode.value("模板 5").toObject(); //这里取值会失败

templates.json文件

{
    "UserTemplates": {
        "模板 1": "2022-03-30 19:50:23 564",
        "模板 2": "2022-03-30 19:50:23 564",
        "模板 3": "2022-03-30 19:50:23 564",
        "模板 4": "2022-03-30 19:50:23 564",
        "模板 5": "2022-03-30 19:50:23 564",
        "模板 6": "2022-03-30 19:50:23 564",
        "模板 7": "2022-03-30 19:50:23 564",
        "模板 8": "2022-03-30 19:50:23 564",
        "模板 9": "2022-03-30 19:50:23 564",
        "模板 10": "2022-03-30 19:50:23 564",
        "模板 11": "2022-03-30 19:50:23 564",
        "模板 12": "2022-03-30 19:50:23 564",
        "模板 13": "2022-03-30 19:50:23 564",
        "模板 14": "2022-03-30 19:50:23 564",
        "模板 15": "2022-03-30 19:50:23 564",
        "模板 16": "2022-03-30 19:50:23 564",
        "模板 17": "2022-03-30 19:50:23 564",
        "模板 18": "2022-03-30 19:50:23 564"
    }
}

现象
1、“模板“替换为英文就没问题
2、删掉几个就没问题
3、从qt5.15换到qt5.11环境就没问题

    //直接使用m_jsonRoot = jsonDocument.object()在qt5.15版本上对中文字符串作为key支持不好,
    //会出现userNode.value(key)查找不到的问题,使用以下方法构造的m_jsonRoot则不会出现该问题
    QJsonObject tmpJsonRoot = jsonDocument.object();
    QJsonObject userNode = tmpJsonRoot.value(USERTEMPLATES).toObject();
    for (QJsonObject::iterator it = userNode.begin(); it != userNode.end(); it++) {
        QJsonObject templateNode = it.value().toObject();
        QJsonObject node;
        node.insert(TEMPLATEID, templateNode.value(TEMPLATEID).toString());
        node.insert(TEMPLATEPATH, templateNode.value(TEMPLATEPATH).toString());
        node.insert(TEMPLATETIME, templateNode.value(TEMPLATETIME).toString());

        QJsonObject userNode = m_jsonRoot.value(USERTEMPLATES).toObject();
        userNode.insert(it.key(), node);
        m_jsonRoot.insert(USERTEMPLATES, userNode);
    }
    QJsonObject node = userNode.value("模板 5").toObject(); //这里取值会没问题

参考:
qt 创建和解析中文字符 json
QT之QJson传输和中文乱码解决方案

举报

相关推荐

0 条评论