不唯安 2024-10-25 14:40 采纳率: 62.5%
浏览 40
已结题

QT调用百度智能云千帆模型无法取得返回文本

代码如下

#include "answer.h"
#include "http.h"
#include <ui_mainwindow.h>

Answer::Answer(QObject *parent) : QObject(parent)
{

}

QString Answer::getAnswer(QString question)
{
    QString accessToken;
    QString tokenUrl=QString(answerToken).arg(answerclient_id).arg(answerclient_secret);//结合AT请求

    QMap<QString,QString> header; //请求头信息
    header.insert(QString("Content-Type"),QString("application/json"));
    header.insert(QString("Accept"),QString("application/json"));
    QByteArray requestData;
    QByteArray replyData;


    Http m_http;
    bool result = m_http.post_sync(tokenUrl,header,requestData,replyData);
    if(result){
        QString key = "access_token";
        accessToken = getJsonValue(replyData,key);
    }
    else {
        QMessageBox::critical(NULL,"网络错误","获取token数据失败");
        return "";
    }

    QString aiUrl=QString(baiduAiurl).arg(accessToken);//二次请求url
    replyData.clear();


    requestData=QString("{\
                            \"endpoint\":\"ERNIE-Speed-128K\",\
                \"messages\":{\
                            \"role\":\"user\",\
                            \"content\":\"%1\"\
                            }\
                            }").arg(question).toUtf8();

    //requestData = question.toLocal8Bit();

    result=m_http.post_sync(aiUrl,header,requestData,replyData);
    if(result)
    {
        QString key="result";
        QString text=getJsonValue(replyData,key);
        qDebug() << "Reply:" << replyData;

        return text;
    }
    QMessageBox::critical(NULL,"网络错误","获取识别数据失败");

    return "";
}


QString Answer::getJsonValue(QByteArray ba, QString key)
{
    QJsonParseError parseError;
    QJsonDocument jsonDocument = QJsonDocument::fromJson(ba,&parseError);
    if(parseError.error==QJsonParseError::NoError)
    {
        if(jsonDocument.isObject())//如果是js对象
        {
            QJsonObject jsonobj=jsonDocument.object();//转换为对象
            if(jsonobj.contains(key))//判断有无key键对应值
            {
                QJsonValue jsonval=jsonobj.value(key);//得到val值

                if(jsonval.isString())//是否为字符串
                {
                    return jsonval.toString();
                }
                else if(jsonval.isArray())
                {
                    QJsonArray arr=jsonval.toArray();//转化为标准json数组
                    QJsonValue jv=arr.at(0);//取出第0个值
                    return jv.toString();
                }
            }

        }
    }
    return "";
}

//改动了一下代码,错误报告"error_code":336002,"error_msg":"Invalid JSON"

  • 写回答

29条回答

  • CSDN专家-sinJack 2024-10-25 15:19
    关注
    获得0.60元问题酬金

    这个函数中,基本都没有else块,else的情况也打印出来看看。
    函数入口,至少得把当前ba变量的值打印出来看看吧。

    QString Answer::getJsonValue(QByteArray ba, QString key)
    {
        QJsonParseError parseError;
        QJsonDocument jsonDocument = QJsonDocument::fromJson(ba,&parseError);
        if(parseError.error==QJsonParseError::NoError)
        {
            if(jsonDocument.isObject())//如果是js对象
            {
                QJsonObject jsonobj=jsonDocument.object();//转换为对象
                if(jsonobj.contains(key))//判断有无key键对应值
                {
                    QJsonValue jsonval=jsonobj.value(key);//得到val值
     
                    if(jsonval.isString())//是否为字符串
                    {
                        return jsonval.toString();
                    }
                    else if(jsonval.isArray())
                    {
                        QJsonArray arr=jsonval.toArray();//转化为标准json数组
                        QJsonValue jv=arr.at(0);//取出第0个值
                        return jv.toString();
                    }
                }
     
            }
        }
        return "";
    }
    
    
    
    评论

报告相同问题?

问题事件

  • 系统已结题 11月2日
  • 修改了问题 10月25日
  • 创建了问题 10月25日