QJson解析数组里面的不同对象的值(怎么将数组转为对象)

工作需要用到QJson
https://github.com/qt-json/qt-json

用的时候发现一个问题 没有新版的toObject()

然后也找了一段时间解决方法,最后OK

使用toMap()代替

要解析内容如下:

要解析内容如下

#include "emojiui.h"



emojiUI::emojiUI(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);
    //QString json = readFile(":/new/prefix1/example.json");
    QString json = readFile(":/new/prefix1/emoji.json");
    if (json.isEmpty()) {
        qFatal("Could not read JSON file!");
        return ;
    }

    bool ok;
    JsonObject result = QtJson::parse(json, ok).toMap();
    if (!ok) {
        qFatal("An error occurred during parsing");
        return ;
    }
    qDebug()<<"-----------";
    qDebug()<<"-----------";
    jsonprintResult(result);

}

emojiUI::~emojiUI()
{

}

//解析内容
void emojiUI::jsonprintResult(const JsonObject &result) {

    JsonObject indent = result["categoryMap"].toMap();
    //数组处理
    JsonArray plugins = indent["People"].toList();
    for(int i=0;i<plugins.count();i++)
    {
        JsonObject temp = plugins.at(i).toMap();
        qDebug() << "  -" <<temp["unicode"].toString();
    }
}

QString emojiUI::readFile( const QString &filename )
{
    QFile f(filename);
    if (!f.open(QFile::ReadOnly | QFile::Text)) {
        return QString();
    } else {
        QTextStream in(&f);
        return in.readAll();
    }
}

还有使用
QJson要留意命名空间问题
要有

using QtJson::JsonObject;
using QtJson::JsonArray;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 QJson 库可以解析 JSON 文件。以下是解析 JSON 文件的基本步骤: 1. 包含 QJson 库头文件: ```cpp #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> ``` 2. 从文件中读取 JSON 数据: ```cpp QFile file("data.json"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QByteArray jsonData = file.readAll(); file.close(); ``` 3. 将 JSON 数据解析成 QJsonDocument 对象: ```cpp QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData); ``` 4. 从 QJsonDocument 对象中获取 QJsonObject 或 QJsonArray: ```cpp if (jsonDoc.isObject()) { QJsonObject jsonObj = jsonDoc.object(); // 处理 QJsonObject 对象 } else if (jsonDoc.isArray()) { QJsonArray jsonArray = jsonDoc.array(); // 处理 QJsonArray 对象 } ``` 5. 从 QJsonObject 或 QJsonArray 中获取具体的 JSON 数据: ```cpp // 从 QJsonObject 中获取字符串数据 QString name = jsonObj["name"].toString(); // 从 QJsonArray 中获取整数数据 int age = jsonArray[0].toInt(); ``` 完整的代码示例: ```cpp #include <QJsonDocument> #include <QJsonObject> #include <QJsonArray> #include <QFile> void parseJsonFile(const QString &fileName) { QFile file(fileName); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QByteArray jsonData = file.readAll(); file.close(); QJsonDocument jsonDoc = QJsonDocument::fromJson(jsonData); if (jsonDoc.isObject()) { QJsonObject jsonObj = jsonDoc.object(); QString name = jsonObj["name"].toString(); int age = jsonObj["age"].toInt(); qDebug() << "Name: " << name << ", Age: " << age; } else if (jsonDoc.isArray()) { QJsonArray jsonArray = jsonDoc.array(); foreach (const QJsonValue & value, jsonArray) { int age = value.toInt(); qDebug() << "Age: " << age; } } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值