기존 JSON 파일을 읽고 수정하고 (예 : 객체, 배열 및 키 - 값 쌍을 대체, 제거 및 추가) 파일을 다시 쓸 수 있어야합니다. .Qt JSON 파일을 수정하는 중
{
"array": [
{
"name": "Channel",
"default": 1
},
{
"name": "Size",
"default": 457
}
]
}
내가 성공적으로 파일을 읽는하지만, 다음 코드를 사용하여를 변경할 실패하고있다 :
나는 읽고이 내용과 JSON 파일에 쓰기를 시도하고있다
QFile File("/path/to/myfile.json");
File.open(QIODevice::ReadOnly | QIODevice::Text);
QJsonParseError JsonParseError;
QJsonDocument JsonDocument = QJsonDocument::fromJson(File.readAll(), &JsonParseError);
File.close();
QJsonObject RootObject = JsonDocument.object();
QJsonArray Array = RootObject.value("array").toArray();
QJsonObject ElementOneObject = Array.at(0).toObject();
ElementOneObject.insert("key", QJsonValue(QString("value")));
ElementOneObject.insert("name", QJsonValue(QString("David")));
File.open(QFile::WriteOnly | QFile::Text | QFile::Truncate);
File.write(JsonDocument.toJson());
File.close();
배열의 첫 번째 요소에 새로운 이름이 "David"이고 "key" : "value"
과 같은 새 키 - 값 쌍이 표시 될 것으로 예상됩니다. 이 코드가 실행 된 후 파일 내용이 동일합니다. 키 - 값 쌍의 순서가 알파벳 순서로 정렬 된 키에 의해 정렬되도록 변경 되었기 때문에 파일이 기록되었다는 것을 알고 있습니다.
내가 변경하려고 시도한 변경 사항을 파일에 어떻게 반영합니까?
이전에 setObject()를 시도했지만 충분하지 않았습니다. 문제는 RootObject가 복사본이라는 것입니다. 그러면 Array이고 또한 복사본입니다. 그런 다음 해당 배열에서 요소를 가져옵니다.이 배열은 복사본입니다. 나는 이것을 마지막에 수행하면 작동한다. Array.takeAt (0); Array.insert (0, ElementOneObject); RootObject.insert ("array", Array); JsonDocument.setObject (RootObject); 이것은 약간 정신 나간 것 같습니다! – oggmonster
루트 객체를 얻으면 find 함수를 사용하면 키의 실제 데이터에 대한 반복자를 반환합니다. 이렇게하면 끝에 setObject를 호출하기 전에 데이터를 직접 변경할 수 있습니다. – TheDarkKnight