使用 Qt 库在 C++ 中解析 json 数据
Posted
技术标签:
【中文标题】使用 Qt 库在 C++ 中解析 json 数据【英文标题】:parse json data in c++ with Qt library 【发布时间】:2020-03-17 11:19:44 【问题描述】:我的 json 数据如下:
[
"id":"01323",
"name":"Json Roy",
"contacts":[
"CONTACT1=+917673267299",
"CONTACT2=+917673267292",
"CONTACT3=+917673267293",
"CONTACT4=+917673267294",
]
]
我想解析上面的 jsonData 数据并提取该数据的联系人。
QJsonParseError jerror;
QJsonDocument jsonData = QJsonDocument::fromJson(jsonData.c_str(),&jerror);
QJsonArray jsonArray = jsonData.array();
QJsonObject jsonObject = jsonData.object();
foreach (const QJsonValue & value, jsonArray)
string contact=jsonObject["contacts"].toString().toUtf8().constData();
有人可以建议我如何使用上述相同的库来完成此操作吗?
【问题讨论】:
【参考方案1】:我删除了联系人列表中的最新逗号。
您的错误是将QJsonValue
视为您想要的,但QJsonValue
类似于包装器,因此您应该将其转换为适当的对象(数组、对象、字符串等)。
jsonData
不是一个对象,所以jsonData.object()
不会给你你想要的。
这是代码,它可能是您的起点。
#include <QString>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
#include <QJsonParseError>
#include <QDebug>
#include <string>
int main()
auto json_input = R"([
"id":"01323",
"name":"Json Roy",
"contacts":[
"CONTACT1=+917673267299",
"CONTACT2=+917673267292",
"CONTACT3=+917673267293",
"CONTACT4=+917673267294"
]
])";
QJsonParseError err;
auto doc = QJsonDocument::fromJson( QString::fromStdString( json_input ).toLatin1() , &err );
auto objects = doc.array();
if ( err.error != QJsonParseError::NoError )
qDebug() << err.errorString();
return 1;
for( auto obj_val : objects )
auto obj = obj_val.toObject();
auto contacts = obj.value( "contacts" ).toArray();
for ( auto contact_val : contacts )
auto cotact_str = contact_val.toString();
qDebug() << cotact_str;
输出:
CONTACT1=+917673267299
CONTACT2=+917673267292
CONTACT3=+917673267293
CONTACT4=+917673267294
【讨论】:
,你为什么用反斜杠?"
在c++中有特殊含义,所以需要使用转义字符`\`。还要通知编译器该行正在恢复,所以我在行尾附加了转义字符。
@Excoder 我编辑了以便更好地理解。 en.cppreference.com/w/cpp/language/string_literal以上是关于使用 Qt 库在 C++ 中解析 json 数据的主要内容,如果未能解决你的问题,请参考以下文章