【问题标题】:parse json data in c++ with Qt library使用 Qt 库在 C++ 中解析 json 数据
【发布时间】: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();

}

有人可以建议我如何使用上述相同的库来完成此操作吗?

【问题讨论】:

    标签: c++ qjson qjsonobject


    【解决方案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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-19
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    相关资源
    最近更新 更多