在 qt c++ 中获取 Json 数组中 Qstring 的输出

Get the Output of Qstring in Json Array in qt c++

本文关键字:Qstring 输出 数组 获取 qt c++ Json      更新时间:2023-10-16

我写了一个代码来获取 qbytearray 输出到 Qstring 列表,然后在 qt c++ 中使用 delimeter ',' 拆分它

现在我需要将其添加到 Json 数组中

我得到的输出是

"diskinfo": "Node: ASHUTOSH-PC, Description: Local Fixed Disk, FreeSpace: 420842713088, Name: C:, Size  : 499875049472  Node: ASHUTOSH-PC, Description: CD-ROM Disc, FreeSpace: , Name: D:, Size  :   Node: ASHUTOSH-PC, Description: Local Fixed Disk, FreeSpace: 324858568704, Name: E:, Size  : 487687450624  Node: ASHUTOSH-PC, Description: CD-ROM Disc, FreeSpace: 0, Name: F:, Size  : 553459712",

预期输出为

{
  "diskinfo": "Node: ASHUTOSH-PC, Description: Local Fixed Disk, FreeSpace: 420842713088, Name: C:, Size  : 499875049472
              Node: ASHUTOSH-PC, Description: CD-ROM Disc, FreeSpace: , Name: D:, Size  : 
              Node: ASHUTOSH-PC, Description: Local Fixed Disk, FreeSpace: 324858568704, Name: E:, Size  : 487687450624 
             Node: ASHUTOSH-PC, Description: CD-ROM Disc, FreeSpace: 0, Name: F:, Size  : 553459712"
}

现在我需要获得 预期输出 从哪里开始 从每个节点开始 它应该显示在数组的下一行?我需要创建 Json 数组,然后对于每一行,创建一个 json 对象,然后拆分它们将其插入 json 对象并在 jsonarray 中插入该 json 对象,并将该 jsonarray 返回给 json。这怎么会嘘寒问暖?有人可以帮忙吗?

以下是我当时编写的代码 如何在 JSON 中创建和解析它

QString Utils::getDiskSpace()
{
    static QString diskSpaceCmd ( qgetenv("WINDIR") + 
        "\system32\wbem\wmic logicaldisk get name, freespace, size, description /format:csv");
    QProcess proc;
    QByteArray qba;
    QString out_str;
    proc.start(diskSpaceCmd);
    if(proc.waitForFinished(-1))
    {
        qba = proc.readAllStandardOutput();
        qba = qba.trimmed();
        qba = qba.replace('r',' ');
        QString myString = qba;
        QStringList myStringList = myString.split("n");
        QStringList descriptions = myStringList[0].split(",");
        descriptions[0] = descriptions[0].remove(0, 
                             descriptions[0].indexOf(" ") + 1);
        for(int index = 1;index < myStringList.length();index++)
        {
            QStringList data = myStringList[index].split(",");
            QStringList out;
            for(int ind_2 = 0; ind_2 < data.length(); ind_2++)
                out.push_back(descriptions[ind_2] + ": " +data[ind_2]);
            out_str += out.join(", ");
        }
    }
    QString diskSpace(out_str);
    return diskSpace;
}

伪代码 为我想要的输出而编写

ja = QJsonArray();
for (each line)
{
    QJsonObect oj;
    split("token")
    for (each token in line)
        oj.insert(descriptions, data)
    ja.insert(oj)
}
return ja.toJson

我将如何在我的实际代码中实现。?

以下是我的实用程序.cpp文件

    QString WctUtils::getDiskSpace( )
      {
        static QString diskSpaceCmd ( qgetenv("WINDIR")
                               + "\system32\wbem\wmic logicaldisk get name, freespace, size, description /format:csv");
        QProcess proc;
        QByteArray qba;
        QString out_str;

        proc.start(diskSpaceCmd);
        if(proc.waitForFinished(-1))
         {
            qba = proc.readAllStandardOutput();
            qba = qba.trimmed();
            qba =qba.replace('r',' ');
            QString myString =qba;
            QStringList myStringList = myString.split("n");
            QStringList descriptions = myStringList[0].split(",");
            for(int index = 1;index < myStringList.length();index++)
             {
               QStringList data = myStringList[index].split(",");
               QStringList out;
               for(int ind_2 = 0; ind_2 < data.length(); ind_2++)
              out.push_back(descriptions[ind_2] + ": " +data[ind_2]);
               out_str += out.join(", ");
              }

             }
           QString diskSpace(out_str);
           return (diskSpace);
        }

这是插入 mu Json 的地方

         QJsonObject json;
            if(isRemoteServiceManagerEnabled)
             {
               QLOG_INFO() << "windows service manager web service called to get start time";
               json = JamManager::getServiceStartTimes();
               json.insert(ask::HOST_UPTIME, WctUtils::getLastBootupTime());
               json.insert(ask::DISK_INFO, WctUtils::getDiskSpace());
               json.insert(ask::CPU_USAGE,WctUtils::getcpuUsage());
               json.insert(ask::HOST, QHostInfo::localHostName());
             }
             QJsonDocument replyDoc = QJsonDocument(json);
            aResponse.setHeader(ask::CONTENT_TYPE.toLocal8Bit(),           al::JSON_HEADER.toLocal8Bit());
            aResponse.write(replyDoc.toJson());
           }

}

您可以修改以下代码:

#include <QJsonArray>
#include <QJsonObject>
#include <QJsonDocument>
#include <QFile>
QStringList infos = {"foo", "foofoo", "foofoofoo"}; // you must change it.
// create a json array and fill it.
QJsonArray arr;
foreach(QString const& info, infos)
    arr.append(info);
// create a object for converting.
QJsonObject obj;
obj["diskinfo"] = arr;
// save it.
QJsonDocument doc(obj);
QFile file("save.json");
if(file.open(QIODevice::WriteOnly))
    file.write(doc.toJson());

输出 (save.json(:

{
    "diskinfo": [
        "foo",
        "foofoo",
        "foofoofoo"
    ]
}

编辑:我将在您的第一个代码中实现上述代码。

void Utils::getDiskSpace(QString filename)
{
    static QString const diskSpaceCmd ( qgetenv("WINDIR") + 
        "\system32\wbem\wmic logicaldisk get name, freespace, size, description /format:csv");
    QProcess proc;
    proc.start(diskSpaceCmd);
    if(proc.waitForFinished(-1))
    {
        QByteArray qba;
        qba = proc.readAllStandardOutput();
        qba = qba.trimmed();
        qba = qba.replace('r',' ');
        QString myString(qba);
        QStringList myStringList = myString.split("n");
        QStringList descriptions = myStringList[0].split(",");
        descriptions[0] = descriptions[0].remove(0, 
                             descriptions[0].indexOf(" ") + 1);
        QJsonArray jsarr;
        for(int index = 1;index < myStringList.length();index++)
        {
            QStringList data = myStringList[index].split(",");
            QStringList out;
            for(int ind_2 = 0; ind_2 < data.length(); ind_2++)
                out.push_back(descriptions[ind_2] + ": " +data[ind_2]);
            jsarr.append(out.join(", "));
        }
        // create a object for converting.
        QJsonObject obj;
        obj["diskinfo"] = jsarr;
        // save it.
        QJsonDocument doc(obj);
        QFile file(filename);
        if(file.open(QIODevice::WriteOnly))
            file.write(doc.toJson());
    }
}

最后,我在 QJson 数组中得到了预期输出:

      QJsonArray disk_array;
      QStringList myStringList = myString.split("n");
      QStringList descriptions = myStringList[0].split(",");

      for(int index = 1;index < myStringList.length();index++)
      {
          QStringList data = myStringList[index].split(",");
          QJsonObject obj_disk;
          for(int ind_2 = 0; ind_2 < data.length(); ind_2++)
          {
              obj_disk.insert(descriptions[ind_2],data[ind_2]);
          }
          disk_array.append(obj_disk);
      }

 return (disk_array);

以 JSON 格式获得的输出:

     "diskinfo": [
    {
        "Description": "Local Fixed Disk",
        "FreeSpace": "418491035648",
        "Name": "C:",
        "Node": "ASHUTOSH-PC",
        "Size  ": "499875049472  "
    },
    {
        "Description": "CD-ROM Disc",
        "FreeSpace": "",
        "Name": "D:",
        "Node": "ASHUTOSH-PC",
        "Size  ": "  "
    },
    {
        "Description": "Local Fixed Disk",
        "FreeSpace": "324668514304",
        "Name": "E:",
        "Node": "ASHUTOSH-PC",
        "Size  ": "487687450624  "
    },
    {
        "Description": "CD-ROM Disc",
        "FreeSpace": "0",
        "Name": "F:",
        "Node": "ASHUTOSH-PC",
        "Size  ": "553459712"
    }
],