13,005
回編集
278行目: | 278行目: | ||
catch (QException &ex) { | catch (QException &ex) { | ||
qWarning("Could not modify json file."); | qWarning("Could not modify json file."); | ||
file.close(); | |||
return -1; | |||
} | |||
file.close(); | |||
return a.exec(); | |||
} | |||
</syntaxhighlight> | |||
<br><br> | |||
== JSONファイルのオブジェクトの削除 == | |||
以下に示すようなJSONファイルにおいて、各オブジェクトから<u>fuga</u>キーの値がffのオブジェクトを削除する。<br> | |||
<syntaxhighlight lang="json"> | |||
[ | |||
{ | |||
"hoge": "aa", | |||
"piyo": "bb", | |||
"fuga": "cc" | |||
}, | |||
{ | |||
{ | |||
"hoge": "dd", | |||
"piyo": "ee", | |||
"fuga": "ff" | |||
}, | |||
{ | |||
"hoge": "gg", | |||
"piyo": "hh", | |||
"fuga": "ii" | |||
} | |||
] | |||
</syntaxhighlight> | |||
<br> | |||
JSONファイルの任意のオブジェクトを削除する場合、以下に示す手順に従う。<br> | |||
# JSONファイルの読み込み | |||
#: <code>QFile</code>クラスおよび<code>QJsonDocument</code>クラスを使用して、JSONファイルを読み込む。 | |||
# "fuga"キーの値の確認 | |||
#: <code>QJsonDocument</code>クラスを使用して読み込んだデータを解析する。 | |||
#: 各オブジェクトの"fuga"キーの値を確認して、値が"ff"と一致するものを特定する。 | |||
# 条件に一致するオブジェクトの削除 | |||
#: 条件に一致するオブジェクトを配列から削除する。 | |||
# 変更をファイルに保存 | |||
#: 変更後のJSONデータをファイルに再保存する。 | |||
<br> | |||
以下の例では、JSONファイルからデータを読み込み、各オブジェクトにあるfugaキーの値がffのオブジェクトを削除して、その結果を元のファイルに上書き保存している。<br> | |||
<syntaxhighlight lang="c++"> | |||
#include <QCoreApplication> | |||
#include <QFile> | |||
#include <QJsonDocument> | |||
#include <QJsonArray> | |||
#include <QJsonObject> | |||
#include <QDebug> | |||
int main(int argc, char *argv[]) | |||
{ | |||
QCoreApplication a(argc, argv); | |||
QFile file("/path/to/your/jsonfile.json"); | |||
if (!file.open(QIODevice::ReadOnly)) { | |||
qWarning("ファイルを開けませんでした。"); | |||
return -1; | |||
} | |||
QByteArray data = file.readAll(); | |||
QJsonDocument doc(QJsonDocument::fromJson(data)); | |||
QJsonArray array = doc.array(); | |||
// "fuga"キーの値が"ff"のオブジェクトを削除する | |||
QJsonArray newArray; | |||
QString targetfugaStr = "ff"; | |||
for (int i = 0; i < array.size(); ++i) { | |||
QJsonObject obj = array[i].toObject(); | |||
QString fugaString = obj["fuga"].toString() | |||
if (targetfugaStr != targetDate) { | |||
newArray.append(obj); | |||
} | |||
} | |||
// 変更をファイルに保存 | |||
QJsonDocument saveDoc(newArray); | |||
if (!file.open(QIODevice::WriteOnly)) { | |||
qWarning("ファイルを書き込みモードで開けませんでした"); | |||
return -1; | |||
} | |||
try { | |||
file.write(saveDoc.toJson()); | |||
} | |||
catch (QException &ex) { | |||
qWarning("JSONファイルの保存に失敗しました"); | |||
file.close(); | file.close(); | ||