QT(30)-json-QjsonValue-QjsonObject-QjsonArray-QjsonDocument

1.json文件注意事项
2.json操作4个类


 1.json 注意事项:
  1.1.最后一个不加",".
  1.2.key值唯一
  1.3.同一个文件只能有一个json对象或者是json数组,根节点只能有一个。

   1.3.1json对象
QT(30)-json-QjsonValue-QjsonObject-QjsonArray-QjsonDocument_第1张图片

1.3.2json数组
QT(30)-json-QjsonValue-QjsonObject-QjsonArray-QjsonDocument_第2张图片

2.json操作4个类
QT(30)-json-QjsonValue-QjsonObject-QjsonArray-QjsonDocument_第3张图片
 

函数参看帮助。
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.遍历


把下列结构写入文件并读出。
QT(30)-json-QjsonValue-QjsonObject-QjsonArray-QjsonDocument_第4张图片

 

.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




 

你可能感兴趣的:(qt,json)