Qt 和 JSON 资源解析 - 空 QJSONDocument

Posted

技术标签:

【中文标题】Qt 和 JSON 资源解析 - 空 QJSONDocument【英文标题】:Qt and JSON resource parsing - Empty QJSONDocument 【发布时间】:2014-10-30 09:36:19 【问题描述】:

我在使用 QJON 对象解析 JSON 时遇到了麻烦。

我读取了我在资源文件中引用的一个 json 文件,读取了内容并尝试从我得到的 QString 中初始化一个 QJSONDocument。而且它似乎不起作用

这是我使用的代码:

QFile myFile(":/mime/iconemapping.json");

myFile.open(QIODevice::ReadOnly);

QJsonDocument jsonContent;
QJsonObject root;
QString jsonString = QString::fromUtf8(myFile.readAll()).simplified();

jsonContent = QJsonDocument::fromJson(jsonString.toUtf8());

root = jsonContent.object();

QJsonObject ext = root["extensions"].toObject();

QStringList listeCle = ext.keys();
int s = listeCle.size();

for (int i = 0; i < listeCle.size(); i++) 
    QString cle = listeCle.at(i).toLocal8Bit().constData();
    MAP_ICONE_MIME.insert(cle, ext[cle].toString());


myFile.close();

在我尝试 QJSONDocument::fromJson() 之前,我的 jsonString 包含: "extensions" : ".7z" : ":/mime/7zip.png", ".ace" : ":/mime/ace.png", ".ai" : ":/mime/ai.png", ".eps" : ":/mime/ai.png", ".alg" : ":/mime/algobox.png", ".rar" : ":/mime/archive.png", ".aiff" : ":/mime/audio-x-generic.png"。 (有更多数据,但我想你明白了)。

程序不会意外停止,但 listeCle.size() 始终为 0。 我尝试直接访问ext[".7z"].toString(),但结果仍然是""

我可能犯了一个巨大的错误,但到目前为止,这是程序中唯一失败的 JSON 解析。

你有什么解释或线索吗?

谢谢你的一切

【问题讨论】:

我认为您的 json 无效,最后需要一个 。这是复制/粘贴错误还是这真的是您使用的 json? 我能说我恨自己,我想死吗?这是一个复制粘贴错误,但从我的旧项目到新项目。我坚持了 3 个小时 :( 抱歉浪费时间 冷静,每个人有时都会犯这样的错误...... 【参考方案1】:

所以JSON 无效。我建议以后使用http://jsonformatter.curiousconcept.com/,这是一个很棒的网站。


    "extensions":
        ".7z":":/mime/7zip.png",
        ".ace":":/mime/ace.png",
        ".ai":":/mime/ai.png",
        ".eps":":/mime/ai.png",
        ".alg":":/mime/algobox.png",
        ".rar":":/mime/archive.png",
        ".aiff":":/mime/audio-x-generic.png"
    

【讨论】:

以上是关于Qt 和 JSON 资源解析 - 空 QJSONDocument的主要内容,如果未能解决你的问题,请参考以下文章

QT学习_QT解析Json格式文件

Qt解析Json数据

Qt平台下使用QJson解析和构建JSON字符串

Qt平台下使用QJson解析和构建JSON字符串

Qt平台下使用QJson解析和构建JSON字符串

qt解析json汉字和数字一起的时候提示数据错误