使用 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 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在Qt C++中解析JSON数据并使之被QML应用 / 蓝讯

C++ Qt 无法正确解析 JSON 数组

Qt之JSON生成与解析

json库在golang中的使用

Qt Json解析c ++

QT使用QJson生成解析Json数据的方法