QJson Document, QJson Object, QJson Array를 사용한QT 해석
Qt5를 사용하고 있습니다.json 객체에서 값을 가져오려고 합니다.데이터를 가져오려고 하는 json 객체는 다음과 같습니다.
{
"success": true,
"properties": [
{
"ID": 1001,
"PropertyName": "McDonalds",
"key": "00112233445566778899aabbccddeeff"
},
{
"ID": 1002,
"PropertyName": "Burger King",
"key": "10112233445566778899aabbccddeeff"
},
{
"ID": 1003,
"PropertyName": "Taco Bell",
"key": "20112233445566778899aabbccddeeff"
}
]
}
다음 3개의 어레이를 작성하려면 어떻게 해야 합니까?properties[x].ID
,properties[x].PropertyName
,그리고.properties[x].key
QT로요?
편집:
사용.QScriptEngine
이거 해봤어요.
QString data = (QString)reply->readAll();
QScriptEngine engine;
QScriptValue result = engine.evaluate(data);
qDebug() << result.toString();
디버깅에서 "SyntaxError: Parse error"라고 표시됩니다.
내가 알아냈어
QStringList propertyNames;
QStringList propertyKeys;
QString strReply = (QString)reply->readAll();
QJsonDocument jsonResponse = QJsonDocument::fromJson(strReply.toUtf8());
QJsonObject jsonObject = jsonResponse.object();
QJsonArray jsonArray = jsonObject["properties"].toArray();
foreach (const QJsonValue & value, jsonArray) {
QJsonObject obj = value.toObject();
propertyNames.append(obj["PropertyName"].toString());
propertyKeys.append(obj["key"].toString());
}
다음으로 'C++ 및 Qt를 사용한JSON 조작 방법'의 예를 나타냅니다.
// reads a json file from disk to QVariantMap
// originally from http://erickveil.github.io/2016/04/06/How-To-Manipulate-JSON-With-C++-and-Qt.html
bool readJsonFile(std::string file_path, QVariantMap& result)
{
// step 1
QFile file_obj(QString::fromStdString(file_path));
if (!file_obj.open(QIODevice::ReadOnly)) {
std::cout << "Failed to open " << file_path << std::endl;
exit(1);
}
// step 2
QTextStream file_text(&file_obj);
QString json_string;
json_string = file_text.readAll();
file_obj.close();
QByteArray json_bytes = json_string.toLocal8Bit();
// step 3
auto json_doc = QJsonDocument::fromJson(json_bytes);
if (json_doc.isNull()) {
std::cout << "Failed to create JSON doc." << std::endl;
return false;
}
if (!json_doc.isObject()) {
std::cout << "JSON is not an object." << std::endl;
return false;
}
QJsonObject json_obj = json_doc.object();
if (json_obj.isEmpty()) {
std::cout << "JSON object is empty." << std::endl;
return false;
}
// step 4
result = json_obj.toVariantMap();
return true;
}
// writes a QVariantMap to disk
bool writeJsonFile(QVariantMap point_map, std::string file_path)
{
QJsonObject json_obj = QJsonObject::fromVariantMap(point_map);
QJsonDocument json_doc(json_obj);
QString json_string = json_doc.toJson();
QFile save_file(QString::fromStdString(file_path));
if (!save_file.open(QIODevice::WriteOnly)) {
std::cout << "failed to open save file" << std::endl;
return false;
}
save_file.write(json_string.toLocal8Bit());
save_file.close();
return true;
}
Firebase에 대한 API 요청에 QT Network를 사용하고 있는데 어떤 이유로 인해 데이터가 가득 찬 응답을 받았는데 어레이로 해석할 때 null을 받았습니다.
void firebaseHandler::parseResponse(const QString &response){
@TODO for some reason sometimes the arrayData is empty
QJsonDocument jsonDocument = QJsonDocument::fromJson(response.toUtf8());
QJsonValue kind = jsonDocument.object().value("kind");
QJsonArray arrayData = jsonDocument.array();
qDebug() << "json response is " << jsonDocument.toJson();
}
언급URL : https://stackoverflow.com/questions/19822211/qt-parsing-json-using-qjsondocument-qjsonobject-qjsonarray
'programing' 카테고리의 다른 글
JSON은 ""로 시작할 수 있습니까? (0) | 2023.03.05 |
---|---|
Angular 2에서 클릭 시 이벤트를 호출합니다. (0) | 2023.03.05 |
지시적 정의의 트랜슬루드 옵션을 이해하고 있습니까? (0) | 2023.03.05 |
각 $http vs 서비스 vs ng Resource (0) | 2023.03.05 |
폼 데이터와 요청 페이로드의 차이점은 무엇입니까? (0) | 2023.03.05 |