注意!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)
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()
{

}