我在我的应用程序中做了一个基本上得到一个SQL命令并返回结果在json中的sqlquery方法,问题是这会在填充“和其他有问题的字符时创建错误的jsons ..”QT SqlQuery在json中返回
我想先创建一个QObject然后将其序列化为一个JSON,但不能达到它。
如何使这种方法产生甚至含有“标志数据的有效的JSON?
QString Api::SQLQuery(const QString & sqlquery)
{
QSqlQuery query;
bool firstline = true;
query.setForwardOnly(true);
if(query.exec(sqlquery))
{
QString answer = "[";
while(query.next())
{
if(firstline){firstline = false;}else {answer += ",";}
answer += "{";
for(int x=0; x < query.record().count(); ++x)
{
if(x != 0){answer += ",";}
answer += "\""+query.record().fieldName(x) +"\":\""+ query.value(x).toString()+"\"";
}
answer += "}";
}
answer += "]";
return answer;
}
else
{
return query.lastError().text() ;
}
}
解决方案:
感谢的答案,这是正确的方法:
QString Api::SQLQuery(const QString & sqlquery) {
QSqlQuery query;
query.setForwardOnly(true);
if (!query.exec(sqlquery))return QString();
QJsonDocument json;
QJsonArray recordsArray;
while(query.next())
{
QJsonObject recordObject;
for(int x=0; x < query.record().count(); x++)
{
recordObject.insert(query.record().fieldName(x),QJsonValue::fromVariant(query.value(x)));
}
recordsArray.push_back(recordObject);
}
json.setArray(recordsArray);
return json.toJson();
}
谢谢!我想出了如何按照我的想法来实现它。 2更正:json.setObject应该是json.setArray,并且for循环中的push_back应该在循环外部,但是在while循环中。我在原始文章中添加了更正的代码。再次感谢。 –