在 qt c++ 中获取 Json 数组中 Qstring 的输出
Get the Output of Qstring in Json Array in qt c++
我写了一个代码来获取 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"
}
],
相关文章:
- 递归函数计算序列中的平方和(并输出过程)
- 将 Qvector<uint8_t> 转换为 QString
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么我的代码在输出中增加了93天
- 如何从void函数输出字符串
- 输入到文件并输出到另一个文件,并将流文件传递给函数
- AES加密到解密未正确输出
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- C++格式化输出问题
- 将值从二维数组输出到文本文件
- 如何将QString绑定到QSQLQUERY,该呼叫过程输出VARCHAR
- 在 qt c++ 中获取 Json 数组中 Qstring 的输出
- 如何将QProcess输出读取到QString
- qDebug输出QString UTF-8非ascii符号,如uxxxx