【Qt-Json***】Qt 5はQJsonを利用してファイルからJsonを読み出し解析する
Jsonファイルはこうです.
ここで、1級括弧内のすべての内容を1級QJsonObjectと見なし、1級Objと記すことができる.1級Objには、2つの並列の2級大かっこと中かっこがあり、この3つはそれぞれ1つの2級Objと見なすことができる.このように、N級Objであってもよい.
各レベルObjでは、キーワードKey値に基づいて、例えば、1レベルObj内に3つのKey値がある:“first fruit”、“second fruit”、“three fruit array”;key値に基づいて対応する2次Objを見つけることができ、その後、2次Objにおいてその中のkey値に基づいて3次を見つけることができ、このように推定することができる.
あるレベルObjに次のレベルObjが含まれていない場合、または下のレベルObjだけでなく、上の2つの括弧内に下のレベルObjが含まれていない場合、key:valueの形で存在する場合と、上の2つの2つの2つの2つの2つの括弧の内容に分けられる.もう1つは、上の2段の括弧の中にarray形式で存在する並列項で、列挙のようなものです.どちらの場合も、「icon」:「orangeIcon」または「eat 1」などの具体的な値を2つの方法で取り出します.
以上のjson構造の簡単な理解に基づいて、次のコードを見ると、少し理解しやすいかもしれません.特に第2部のコード.
ローカルディスクに保存します.QJsonを利用すれば解析が容易にできる.
必要なヘッダファイル:
実行結果:
上は2段Objしか含まれていない場合であり、以下はより複雑な点の多段objであり、一点に従えば、各段においてObjを独立したObjとして、同じようにしてその含まれている次の段Objに情報を取得することが容易である.
1.Jsonドキュメントの値を読み込みます:(コードは次のとおりです)
2.jsonドキュメントのプロパティの値を変更します:(コードは次のとおりです)
{//
"first fruit":
{//
"describe":"an apple",
"icon":"appleIcon",
"name":"apple"
},
"second fruit":
{
"describe":"an orange",
"icon":"orangeIcon",
"name":"orange"
},
"three fruit array":
[//
"eat 0",
"eat 1",
"eat 2",
"eat 3",
"eat 4"
]
}
ここで、1級括弧内のすべての内容を1級QJsonObjectと見なし、1級Objと記すことができる.1級Objには、2つの並列の2級大かっこと中かっこがあり、この3つはそれぞれ1つの2級Objと見なすことができる.このように、N級Objであってもよい.
各レベルObjでは、キーワードKey値に基づいて、例えば、1レベルObj内に3つのKey値がある:“first fruit”、“second fruit”、“three fruit array”;key値に基づいて対応する2次Objを見つけることができ、その後、2次Objにおいてその中のkey値に基づいて3次を見つけることができ、このように推定することができる.
あるレベルObjに次のレベルObjが含まれていない場合、または下のレベルObjだけでなく、上の2つの括弧内に下のレベルObjが含まれていない場合、key:valueの形で存在する場合と、上の2つの2つの2つの2つの2つの括弧の内容に分けられる.もう1つは、上の2段の括弧の中にarray形式で存在する並列項で、列挙のようなものです.どちらの場合も、「icon」:「orangeIcon」または「eat 1」などの具体的な値を2つの方法で取り出します.
以上のjson構造の簡単な理解に基づいて、次のコードを見ると、少し理解しやすいかもしれません.特に第2部のコード.
ローカルディスクに保存します.QJsonを利用すれば解析が容易にできる.
QFile loadFile("D:\\1.json");
if(!loadFile.open(QIODevice::ReadOnly))
{
qDebug() << "could't open projects json";
return;
}
QByteArray allData = loadFile.readAll();
loadFile.close();
QJsonParseError json_error;
QJsonDocument jsonDoc(QJsonDocument::fromJson(allData, &json_error));
if(json_error.error != QJsonParseError::NoError)
{
qDebug() << "json error!";
return;
}
QJsonObject rootObj = jsonDoc.object();
// key,
QStringList keys = rootObj.keys();
for(int i = 0; i < keys.size(); i++)
{
qDebug() << "key" << i << " is:" << keys.at(i);
}
// JSON ,
if(rootObj.contains("first fruit"))
{
QJsonObject subObj = rootObj.value("first fruit").toObject();
qDebug() << "describe is:" << subObj["describe"].toString();
qDebug() << "icon is:" << subObj["icon"].toString();
qDebug() << "name is:" << subObj["name"].toString();
}
if(rootObj.contains("second fruit"))
{
QJsonObject subObj = rootObj.value("second fruit").toObject();
qDebug() << "describe is:" << subObj.value("describe").toString();
qDebug() << "icon is:" << subObj.value("icon").toString();
qDebug() << "name is:" << subObj.value("name").toString();
}
if(rootObj.contains("three fruit array"))
{
QJsonArray subArray = rootObj.value("three fruit array").toArray();
for(int i = 0; i< subArray.size(); i++)
{
qDebug() << i<
必要なヘッダファイル:
#include
#include
#include
#include
#include
#include
実行結果:
key 0 is: "first fruit"
key 1 is: "second fruit"
key 2 is: "three fruit array"
describe is: "an apple"
icon is: "appleIcon"
name is: "apple"
describe is: "an orange"
icon is: "orangeIcon"
name is: "orange"
0 value is: "eat 0"
1 value is: "eat 1"
2 value is: "eat 2"
3 value is: "eat 3"
4 value is: "eat 4"
上は2段Objしか含まれていない場合であり、以下はより複雑な点の多段objであり、一点に従えば、各段においてObjを独立したObjとして、同じようにしてその含まれている次の段Objに情報を取得することが容易である.
1.Jsonドキュメントの値を読み込みます:(コードは次のとおりです)
QString getJsonParas(QString path, QString firstFlag, QString secondFlag,int index)
{
QString paras="";
QFile file(path);
if (!file.open(QIODevice::ReadOnly)){
qDebug()<
2.jsonドキュメントのプロパティの値を変更します:(コードは次のとおりです)
bool setJsonParas(QString path, QString firstFlag, QString secondFlag,int index,QString para)
{
QFile file(path);
if (!file.open(QIODevice::ReadOnly)){
qDebug()<writeOperateXml->file.open
");
return false;
}
QJsonDocument json;
json.setObject(rootObj);
QByteArray byte_array = json.toJson();
filejson.write(byte_array);
filejson.close();
return true;
}