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

这篇博客详细介绍了在Qt框架下进行JSON对象和数组的操作,包括创建、添加、删除、获取、遍历等关键函数的使用,并提供了具体的代码示例。同时,强调了JSON文件的注意事项,如最后一个元素不加逗号,键值唯一,以及根节点只能有一个JSON对象或数组。
摘要由CSDN通过智能技术生成

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()
{

}

/*
 //1.难点在于解析几层
 2.注意事项:
  2.1json元素最后一个不加逗号
  2.2key必须是唯一的
  2.3文件里只允许有一个大的结构 只能有一个根节点

 //1.基本
 {"firstName":"John","lastName":"Doe"}
 //2.一个Key,value是列表list   多个,最后一个没有“,”
 {"employees":[
    {},
    {},
    {}
  ]}

 {"employees":[
    {"firstName":"John","lastName":"Doe"},
    {"firstName":"Anna","lastName":"Smith"},
    {"firstName":"Peter","lastName":"Jones"}
]}
employees[0].lastName="Jobs";
//3.数组里是json对象
[
 {}
]

[
 {
  "luffy":{
       "age":19,
       "father":"f1",
       "borther":"b1",
       "mother":"m1"
     }
 }
]
//4.描述一个人。一个json对象 多个key value是json对象
{
    "Name": "Ace",
    "Sex":"man",
    "Age":20,
    "Family":{
            "Father": "F1",
            "Mother": "M1",
            "Brother":["B1","B2"]
        },
    "IsAlive":false,
    "address": "yyds"
}
*/

writejson()
 

/*write
 QJsonObject obj;
 QJsonArray familyarr;
 
 .append()
 .insert() 
*/
void MainWindow::writeJson()
{
    QJsonObject rootobj;
    rootobj.insert("Name","Ace");//此处是QjsonValue类型,非字符串
    rootobj.insert("Sex","man");
    rootobj.insert("Age",20);
    QJsonObject subobj;
    subobj.insert("Father","F1");
    subobj.insert("Mother","M1");
    QJsonArray arr;
    arr.append("B1");
    arr.append("B2");
    subobj.insert("Brother",arr);
    rootobj.insert("Family",subobj);
    
    QJsonDocument doc(rootobj);            //json序列化  
    QByteArray json=doc.toJson();          //转换成文本
    
    //写入磁盘
    QFile file("D:\\QTPrj\\HTTP_JSON\\temp.json");
    file.open(QIODevice::WriteOnly);
    file.write(json);
    file.close();    
}



readfromfile()

/*read
  QJsonArray count();size();
  QJsonVaule at(i);       //得到的是这个位置的拷贝
             frist();
             last();
  QJsonVauleRef operator[](int i)  引用
  
  删除:
  iterator QJsonArray::erase(iterator it)
  QJsonArray pop_back();
              pop_front();
              removeAt();
              removeFrist();
              removeLast();
  QJsonVaule  takeAt(int i); 删除
  
*/
/*
QJsonDocument fromBinaryData()
              fromJson()
              isArray() //判断对象 返回 QJsonObject
              isObject()//判断数组 

    
 
 */






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 <QtWidgets/QWidget>
#include "ui_myjson.h"
#include <QJsonDocument>
#include <QJsonArray>
#include <QJsonObject>
#include <QJsonValue>
#include <QDebug>
#include <QString>
#include <QByteArray>
#include <QFile>

class MyJson : public QWidget
{
	Q_OBJECT

public:
	MyJson(QWidget *parent = 0);

	void writeJson();
	void readJson();

	~MyJson();

private:
	Ui::MyJsonClass ui;
};

#endif // MYJSON_H




 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值