기본적으로 SQL 명령을 가져 와서 json에서 결과를 반환하는 응용 프로그램에서 sqlquery 메서드를 만들었습니다. 문제는 "및 기타 문제가있는 문자로 채울 때 잘못된 jsons를 만듭니다.json에서 QT SqlQuery 반환
은 내가 JSON으로 직렬화 한 후 처음있는 QObject를 만들려고하지만, 그것을 달성 할 수 없다.
방법이 방법은 심지어 "표시를 포함하는 데이터와 유효한 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() ;
}
}
솔루션 : 나는 따옴표 등 권리의 탈출을 얻을 수있는 적절한 JSON 구현을 사용하는 것이 좋을 것
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 루프에 있어야합니다. 원래 게시물에 수정 된 코드를 추가했습니다. 다시 한 번 감사드립니다. –