JSON的样式
1,Json对象
JSON的样式是可以相互嵌套的,作为程序的配置文件,JSON的嵌套不要太多。
{
“age”:“24”,
“name”:“sdf”,
“like”:[“you”,“he”,“she”],//嵌套数组
"person”:{“father”,“mother”}//嵌套对象
`}
2,Json数组
[1,2,3,{“1”:“1”,“2”,“2”,“3”:“3”},[1,2,3,4,5,6,7,8],9]
QT中对JSON处理
需要包含的头文件:
#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QByteArray>
#include <QJsonValue>
#include <QFile>
#include <QDebug>
1,写入JSON文件
//1.对象写入JSON文件
///参数:文件的名字
void writeJsonFile(char* filename)
{
QJsonObject object
{
{"property1", 1},
{"property2", 2}
};
QJsonObject Json;
//对象插入值
Json.insert("name","doudou");
Json.insert("age",12);
//插入子对象
QJsonObject subJon;
subJon.insert("city","benjing");
Json.insert("now",subJon);
//插入数组
QJsonArray array;
array.insert(0,1);
array.insert(1,2);
Json.insert("num",array);
Json.insert("z",object);
//QJsonObject转成QJsonDocument(const QJsonObject &object)
QJsonDocument jsonDoc(Json);
//将QJsonDocument转成QByteArry
QByteArray byteArray=jsonDoc.toJson();
//文件操作QFile(const QString &name, QObject *parent)
QFile file(filename);
//打开文件
file.open(QFileDevice::WriteOnly);
//写文件
file.write(byteArray);
}
//2.数组写入文件
void writeJsonFile2(char* filename)
{
QJsonArray Json,subJson;
subJson.insert(0,0);
subJson.insert(1,1);
subJson.insert(2,2);
subJson.insert(3,3);
subJson.append(4);
subJson.append(5);
Json.insert(0,subJson);
QJsonObject object;
object.insert("a","a");
object.insert("b","b");
object.insert("c","c");
object.insert("d","d");
Json.append(object);
//QJsonObject转成QJsonDocument(const QJsonObject &object)
QJsonDocument jsonDoc(Json);
//将QJsonDocument转成QByteArry
QByteArray byteArray=jsonDoc.toJson();
//文件操作QFile(const QString &name, QObject *parent)
QFile file(filename);
//打开文件
file.open(QFileDevice::WriteOnly);
//写文件
file.write(byteArray);
}
2,解析JSON文件
void readJsonFromFile(char* filename)
{
QFile file;
//打开的文件名
file.setFileName(filename);
//打开以读文件
file.open(QIODevice::ReadOnly);
//读文件所有的数据
QByteArray bytearray=file.readAll();
//QByteArray转为QJsonDocument
QJsonDocument jsonDoc;
jsonDoc.fromJson(bytearray);
//QJsonDocument转为QJsonObject还是QJsonArray
if(jsonDoc.isObject())
{
QJsonObject json=jsonDoc.object();
//获取对象中的所有的值
QStringList keys =json.keys();
//通过迭代器访问元素
for(QList<QString>::iterator i=keys.begin();i<keys.end();i++)
{
QChar* k=i->begin();
qDebug()<<k;
}
//通过函数来访问
for(int i=0;i<keys.size();i++)
{
QString key=keys.at(i);
//根据key值获取value值
QJsonValue jsonvalue=json.value(key);
QString key1=keys[i];
QJsonValue jsonvalue1=json[key];
//判断value值的类型
if(jsonvalue.isString())
{
qDebug()<<jsonvalue.toString();
}
else if(jsonvalue.isDouble())
{
qDebug()<<jsonvalue.toInt();
}
else if(jsonvalue.isDouble())
{
qDebug()<<jsonvalue.toBool();
}
else if(jsonvalue.isObject())
{
QJsonObject obj=jsonvalue.toObject();
for(int j=0;j<obj.size();j++)
{
QString subkey=keys.at(i);
//根据key值获取value值
QJsonValue subjsonvalue=json.value(key);
qDebug()<<subjsonvalue.toString();
}
}
else if(jsonvalue.isArray())
{
QJsonArray array=jsonvalue.toArray();
for(int j=0;j<array.size();j++)
{
QString subkey=keys.at(i);
//根据key值获取value值
QJsonValue subjsonvalue=json.value(key);
if(subjsonvalue.isString())
{
qDebug()<<subjsonvalue.toString();
}
}
}
}
}
if(jsonDoc.isArray())
{
QJsonArray arr=jsonDoc.array();
}
}