注意!QtのJsonライブラリ解析に問題があるので、サービス側がstringを回してから来てください.
4632 ワード
注意!QtのJsonライブラリ解析に問題があるので、サービス側がstringを回してから来てください.
"{"total":95,"rows":[{"Id":"20140101329369922464 abad 205 a 9 f","MyTexts":"メールセンターサービス番号","CodeNumber":"0 x 00 0 x 01","CodeName","DataLength":"16"}
これで解析できます
"{"total":95,"rows":[{"Id":"20140101329369922464 abad 205 a 9 f","MyTexts":"メールセンターサービス番号","CodeNumber":"0 x 00 0 x 01","CodeName","DataLength":16}
これでは解析できない
次のライブラリに使用しました.#include #include #include #include #include #include
パッケージおよび使用方法は以下の通りです.
≪使用|Use|emdw≫:シリアル・メソッドを使用して呼び出され、一般的なクエリーでは、後でデータを使用するための考慮事項です.(eventloop)
パッケージ:
"{"total":95,"rows":[{"Id":"20140101329369922464 abad 205 a 9 f","MyTexts":"メールセンターサービス番号","CodeNumber":"0 x 00 0 x 01","CodeName","DataLength":"16"}
これで解析できます
"{"total":95,"rows":[{"Id":"20140101329369922464 abad 205 a 9 f","MyTexts":"メールセンターサービス番号","CodeNumber":"0 x 00 0 x 01","CodeName","DataLength":16}
これでは解析できない
次のライブラリに使用しました.#include
パッケージおよび使用方法は以下の通りです.
≪使用|Use|emdw≫:シリアル・メソッドを使用して呼び出され、一般的なクエリーでは、後でデータを使用するための考慮事項です.(eventloop)
void QJsonTest::btn10_clicked()
{
static WebQuestJsonEngine engine("http://192.168.1.187/LocalData/CodeSettingData");
//static WebQuestJsonEngine engine(ui.lineEdit->text());
WebQusetJsonObject objects = engine.select();
for (int i=0;i<objects.size();i++)
{
QString strCodeName = objects.at(i,"Id").toString();
QString strdatalen = objects.at(i,"MyTexts").toString();
QString strdatatype = objects.at(i,"CodeNumber").toString();
QString strCodeName1 = objects.at(i,"CodeName").toString();
QString strdatalen1 = objects.at(i,"DataLength").toString();
}
engine.releaseSelect();
}
パッケージ:
#pragma once
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QString>
#include <QTimer>
#include "WebQusetJsonObject.h"
class WebQuestJsonEngine
: public QObject
{
Q_OBJECT
public:
WebQuestJsonEngine(QString url);
~WebQuestJsonEngine(void);
///
WebQusetJsonObject select();
///
void releaseSelect();
private:
/// post
QNetworkReply* do_post(QString url, QString _content);
/// get
void do_get(QString url, QString content);
/// json
void do_json( QByteArray bjson );
private slots:
private:
static QNetworkAccessManager netManager;
QJsonArray jarray;
QString url;
QTimer synchronous;
QTimer timeout;
};
#include "WebQuestJsonEngine.h"
#include <QByteArray>
#include <QNetworkRequest>
#include <QUrl>
#include <QJsonParseError>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonArray>
#include <QJsonValue>
#include <QEventLoop>
QNetworkAccessManager WebQuestJsonEngine::netManager;
WebQuestJsonEngine::WebQuestJsonEngine(QString _url):QObject(NULL),url(_url)
{
}
WebQuestJsonEngine::~WebQuestJsonEngine(void)
{
}
//post
QNetworkReply* WebQuestJsonEngine::do_post(QString url, QString _content)
{
QByteArray content;
content.append(_content);
int contentLength = content.length();
QNetworkRequest req;
req.setUrl(QUrl(url));
req.setHeader(QNetworkRequest::ContentTypeHeader,"application/x-www-form-urlencoded");
req.setHeader(QNetworkRequest::ContentLengthHeader,contentLength);
return netManager.post(req,content);
}
//get
void WebQuestJsonEngine::do_get(QString url, QString content)
{
url = url + content;
QNetworkRequest req;
req.setUrl(QUrl(url));
netManager.get(req);
}
//json
void WebQuestJsonEngine::do_json( QByteArray bjson )
{
QJsonParseError json_error;
QJsonDocument parse_doucment = QJsonDocument::fromJson(bjson, &json_error);
if(json_error.error == QJsonParseError::NoError)
{
if(parse_doucment.isObject())
{
QJsonObject obj = parse_doucment.object();
//
if( obj.contains("total") && obj.contains("rows") )
{
QJsonValue rowvalue = obj.take("rows");
if (rowvalue.isArray())
{
// json
jarray = rowvalue.toArray();
}
}
}
}
}
//
WebQusetJsonObject WebQuestJsonEngine::select()
{
//
QEventLoop eventLoop;
connect(&netManager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
QNetworkReply *reply = do_post(url,"");
eventLoop.exec(); //block until finish
disconnect(&netManager, SIGNAL(finished(QNetworkReply*)), &eventLoop, SLOT(quit()));
QByteArray byteArray = reply->readAll();
reply->close();
do_json(byteArray);
qDebug()<<byteArray;
return WebQusetJsonObject(jarray);
}
//
void WebQuestJsonEngine::releaseSelect()
{
}