1.json文件注意事项
2.json操作4个类
1.json 注意事项:
1.1.最后一个不加",".
1.2.key值唯一
1.3.同一个文件只能有一个json对象或者是json数组,根节点只能有一个。
1.3.1json对象
1.3.2json数组
2.json操作4个类
函数参看帮助。
2.1.json 对象,jsonobject:key值升序排列,红黑树。
#1.创建
QJsonObject::QJsonObject() //构造空对象
#2,键值对添加到json
iterator QJsonObject::insert(const QString &key, const QJsonValue &value);//key value
#3. 获取对象中键值对的个数
int QJsonObject::count() const;
int QJsonObject::size() const;
int QJsonObject::length() const;
#4.通过Key去除value
1、QJsonValue QJsonObject:: value(const QString &key) const; //utf-8
2、QJsonValue QJsonObject:: value(QLatin1QString key) const; //字符串不支持中文
3、QJsonValue QJsonObject:: operator[](const QString &key) const; //使用的时候["key值"]
4、QJsonValue QJsonObject:: operator[](QLatin1QString key) const;
#5.删除
void QJsonObject::remove(const QString &key);
QJsonValue QJsonObject::take(const QString &key); //删除键值对后,返回value值
#6.通过Key查找
iterator QJsonObject::find(const QString &key); //返回的是迭代器,解引用,可以得到数据
bool QJsonObject::contains(const QString &key) const; //查看QJsonObject对象中,是否 存在这个key键值对
#7.遍历
1.使用迭代器函数
2.使用[],遍历,类似遍历数组,[]中是key
3.先得到对象中所有的键值,在遍历键值列表,通过key得到value
QStringList QJsonObject::keys() const;//得到当前Json对象中所有的key值
2.2 json数组 ,jsonarray 添加顺序就是它的数组顺序。
#1.创建 QJsonArray::QJsonArray() #2.添加 void QJsonArray::append(const QJsonValue &value); //在尾部追加 void QJsonArray::insert(int i, const QJsonValue &value); //插入到i的位置之前 iterator QJsonArray::insert(iterator before, const QJsonValue &value); //在迭代器当前位置的前面,插入 void QJsonArray::prepend(const QJsonValue &value); //添加到数组头部 void QJsonArray::push_back(const QJsonValue &value); //添加到尾部 void QJsonArray::push_front(const QJsonValue &value); //添加到头部 #3.计算个数 int QJsonArray::count() const; int QJsonArray::size() const; #4.取某个元素 QJsonValue QJsonArray::at(int i) const; //参数i:为在数组中元素对应的下标 拷贝,不能修改数组内元素的值 QJsonValue QJsonArray::first() const; //头部元素 拷贝 QJsonValue QJsonArray::last() const; //尾部元素 拷贝 QJsonValueRef QJsonArray::operator[](int i);//这里返回的值是引用,可以修改 数组内的值 #5.删除某个元素 iterator QJsonArray::erase(iterator it); //基于迭代器的删除 void QJsonArray::pop_back(); //删除尾部 void QJsonArray::pop_front(); //删除头部 void QJsonArray::removeAt(int i); //删除i位置元素 void QJsonArray::removeFirst(); //删除头部 void QJsonArray::removeLast(); //删除尾部 QJsonValue QJsonArray::takeAt(int i); //删除i位置的原始,并返回删除元素的值 #6.遍历
把下列结构写入文件并读出。
.cpp
#include "myjson.h"
MyJson::MyJson(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
QJsonDocument doc;
if (doc.isEmpty())
{
qDebug() << "Json document is emputy!";
}
if (doc.isNull())
{
qDebug() << "Json document is null!";
}
writeJson();
readJson();
}
MyJson::~MyJson()
{
}
void MyJson::writeJson()
{
QJsonObject obj;
QString str2 = "man";
obj.insert("name",QString("Ace"));
obj.insert("sex",str2);
QJsonObject subobj;
subobj.insert("Father",QString("father"));
subobj.insert("Mother",QString("mother"));
QJsonArray array;
array.append(QString("1"));
array.push_back(QString("2"));
subobj.insert("Brother",array);
obj.insert("Family",subobj);
obj.insert("IsAlive",QString("false"));
obj.insert("Comment",QString("yyds"));
QJsonDocument doc(obj); //将Json对象,转换成Json文档
//显示用
QByteArray json = doc.toJson();
ui.textEdit->setText(json);
//写入文件
QFile file("../my.json");
file.open(QFile::WriteOnly);
file.write(json);
file.close();
}
void MyJson::readJson()
{
//读取文件
QFile file("../my.json");
file.open(QFile::ReadOnly);
QByteArray all = file.readAll();
file.close();
QJsonDocument doc = QJsonDocument::fromJson(all);//转换成文档对象
if (doc.isObject())//可以不做格式判断,因为,解析的时候已经知道是什么数据了
{
QJsonObject obj = doc.object(); //得到Json对象
QStringList keys = obj.keys(); //得到所有key
for (int i = 0; i < keys.size(); i++)
{
QString key = keys.at(i);
QJsonValue value = obj.value(key);
if (value.isBool())
{
qDebug() << key << ":" << value.toBool();
}
else if (value.isString())
{
qDebug() << key << ":" << value.toString();
}
else if (value.isDouble())
{
qDebug() << key << ":" << value.toVariant().toInt();
}
else if (value.isObject())
{
qDebug() << key << ":";
QJsonObject subObj = value.toObject();
QStringList subKeys = subObj.keys();
for(int k = 0; k < subKeys.size(); ++k)
{
QJsonValue subValue = subObj.value(subKeys.at(k));
if (subValue.isString())
{
qDebug() << " " << subKeys.at(k) << ":" << subValue.toString();
}
else if (subValue.isArray())
{
qDebug() << " " << subKeys.at(k);
QJsonArray array = subValue.toArray();
for (int j = 0; j < array.size(); j++)
{
qDebug() << " " << array[j].toString();
}
}
}
}
}
}
}
.h
#ifndef MYJSON_H #define MYJSON_H #include#include "ui_myjson.h" #include #include #include #include #include #include #include #include class MyJson : public QWidget { Q_OBJECT public: MyJson(QWidget *parent = 0); void writeJson(); void readJson(); ~MyJson(); private: Ui::MyJsonClass ui; }; #endif // MYJSON_H



