欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何在Qt中實現(xiàn)關(guān)于Json?的操作

 更新時間:2023年08月07日 10:33:03   作者:小怡的編程之路  
JSON是一種輕量級數(shù)據(jù)交換格式,常用于客戶端和服務(wù)端的數(shù)據(jù)交互,不依賴于編程語言,在很多編程語言中都可以使用JSON,這篇文章主要介紹了在Qt中實現(xiàn)關(guān)于Json的操作,需要的朋友可以參考下

前言

一、Json是什么?

1.概念:

JSON(全稱:JavaScript Object Notation),是一種輕量級的數(shù)據(jù)交換格式。它是 JavaScript 中用于描述對象數(shù)據(jù)的語法的擴展。不過并不限于與 JavaScript 一起使用。它采用完全獨立于語言的文本格式,這些特性使 JSON 成為理想的數(shù)據(jù)交換格式。

一般以.json為后綴

2.使用場景:

組織數(shù)據(jù):用于數(shù)據(jù)的網(wǎng)絡(luò)傳輸組織數(shù)據(jù):用于磁盤文件實現(xiàn)數(shù)據(jù)的持久化存儲

用在登錄 記錄用戶名密碼等,下次打開軟件,自動填充。

3.結(jié)構(gòu)和語法:

json語法錯誤:

  • 始終將鍵值對保存在雙引號內(nèi),大多數(shù) JSON 解析器使用雙引號解析 JSON 對象;
  • 切勿在 key 中使用連字符。而是使用下劃線 (_)、全部小寫或駝峰式大小寫;
  • 使用 JSON linter 來檢查 JSON 是有效的,可以使用 JSONLint 等工具進行校驗

Json數(shù)組使用[]表示,[]里面是元素,元素間使用 ”,“分隔,最后一個元素后面,沒有 ,一個Json數(shù)組,支持多種不同的數(shù)據(jù)類型,包括:整形,浮點型,字符串(string),json數(shù)組,json對象,空值-null(null)

Json數(shù)組中嵌套Json數(shù)組,父子關(guān)系Json數(shù)組嵌套Json對象,Json對象可以嵌套Json數(shù)組

數(shù)組內(nèi)元素類型一致 

[1, 2, 3]
["哈哈","hehe","yiyi"]

數(shù)組內(nèi)元素類型不一致

[1, 2, 3, true, false, "haha",null]

Json數(shù)組和Json對象嵌套

[//外層是Json數(shù)組
    {//內(nèi)層是Json對象
        "小明":{//屬于鍵值對
                       "age":19,
                        "father":"大華",
                         "sister":"小妹"
                   }
         }
]

Json數(shù)組嵌套Json數(shù)組

[
    ["cat", "狗狗", "河馬", 1]//元素類型可以不一致
    [1, 3, 5, true]
]

Json對象 

Json對象使用{ }來描述,每個Json對象可以存儲若干個元素,每個元素以鍵值對(key:value)的形式存在,元素與元素之間采用","隔開,最后一個元素沒有,

注意:

1.鍵值key必須是字符串,且同一層的鍵值不能重復(fù)。

2.value值的類型可選:整形,浮點型,字符串,json數(shù)組,json對象,空值-null(null)

3.不能亂加否則解析會出錯,鍵值不唯一將不能搜到正確的value

Json描述一個人的信息:
{
        "NAME":"ACE",
        "Sex":"man",
        "Age":20,
        "Family":{
            "Father":"yiyi",
            "brother":["aa","bb","cc"]
        },
        "IsLive":"true"
}

4.在一個.json文件中:只能有一個Json數(shù)組、只能有一個Json對象 

二、在Qt中實現(xiàn)Json操作的類

使用到以下五個類:

1.QJsonValue:(Json值)

該類封裝了Json支持的數(shù)據(jù)類型 

//構(gòu)造函數(shù)
QJsonValue(Type type = Null) //初始化一個空值
QJsonValue(bool b)  //初始化一個bool值
QJsonValue(double n)   //初始化一個double 值
QJsonValue(int n)  //初始化一個int
QJsonValue(qint64 n)   
QJsonValue(const QString &s)   //QString初始化
QJsonValue(const char *s)  //字符串常量初始化
QJsonValue(const QJsonArray &a)   //JsonArray初始化
QJsonValue(const QJsonObject &o)   //JsonObject初始化
//公共函數(shù)
//判斷函數(shù)
bool isArray() const   //判斷value是否是array
bool isBool() const   //判斷是否是bool
bool isDouble() const  //判斷是否是double
bool isNull() const   //判斷是否是空
bool isObject() const   //判斷是否是對象
bool isString() const   //判斷是否是string
bool isUndefined() const    //判斷是否未定義
//轉(zhuǎn)換函數(shù)
QJsonArray toArray(const QJsonArray &defaultValue) const   //轉(zhuǎn)換為array
QJsonArray toArray() const   //轉(zhuǎn)換成array
bool toBool(bool defaultValue = false) const
double toDouble(double defaultValue = 0) const
int toInt(int defaultValue = 0) const
QJsonObject toObject(const QJsonObject &defaultValue) const
QJsonObject toObject() const
QString toString() const
QString toString(const QString &defaultValue) const
QVariant toVariant() const
Type type() const
bool operator!=(const QJsonValue &other) const
QJsonValue &operator=(const QJsonValue &other)
bool operator==(const QJsonValue &other) const

2.QJsonArray:(Json數(shù)組)

Json數(shù)組是一個值列表。可以通過從數(shù)組中插入和刪除QJsonValue來操作該列表 

//構(gòu)造函數(shù)
QJsonArray()
QJsonArray(std::initializer_list<QJsonValue> args)
QJsonArray(const QJsonArray &other)
//公共函數(shù)
void append(const QJsonValue &value)// 在數(shù)組尾部插入值
QJsonValue at(int i) const
iterator begin()
const_iterator begin() const
const_iterator constBegin() const
const_iterator constEnd() const
bool contains(const QJsonValue &value) const
int count() const
bool empty() const
iterator end()
const_iterator end() const
iterator erase(iterator it)
QJsonValue first() const
void insert(int i, const QJsonValue &value)
iterator insert(iterator before, const QJsonValue &value)
bool isEmpty() const
QJsonValue last() const
void pop_back()
void pop_front()
void prepend(const QJsonValue &value)
void push_back(const QJsonValue &value)
void push_front(const QJsonValue &value)
void removeAt(int i)
void removeFirst()
void removeLast()
void replace(int i, const QJsonValue &value)
int size() const
QJsonValue takeAt(int i)
QVariantList toVariantList() const
//靜態(tài)函數(shù)
QJsonArray fromStringList(const QStringList &list)
QJsonArray fromVariantList(const QVariantList &list)

3.QJsonObject:(Json對象)

Json對象是鍵值對的列表,其中鍵值是唯一的字符串,值由QJsonValue表示 

 
//構(gòu)造函數(shù)
QJsonObject()
QJsonObject(std::initializer_list<QPair<QString, QJsonValue> > args)
QJsonObject(const QJsonObject &other)
//公共函數(shù)
iterator begin()
const_iterator begin() const
const_iterator constBegin() const
const_iterator constEnd() const
const_iterator constFind(const QString &key) const
const_iterator constFind(QLatin1String key) const
bool contains(const QString &key) const
bool contains(QLatin1String key) const
int count() const
bool empty() const
iterator end()
const_iterator end() const
iterator erase(iterator it)
iterator find(const QString &key)
iterator find(QLatin1String key)
const_iterator find(const QString &key) const
const_iterator find(QLatin1String key) const
iterator insert(const QString &key, const QJsonValue &value)
bool isEmpty() const
QStringList keys() const
int length() const
void remove(const QString &key)
int size() const
QJsonValue take(const QString &key)
QVariantHash toVariantHash() const
QVariantMap toVariantMap() const
QJsonValue value(const QString &key) const
QJsonValue value(QLatin1String key) const
bool operator!=(const QJsonObject &other) const
QJsonObject &operator=(const QJsonObject &other)
bool operator==(const QJsonObject &other) const
QJsonValue operator[](const QString &key) const
QJsonValue operator[](QLatin1String key) const
QJsonValueRef operator[](const QString &key)
QJsonValueRef operator[](QLatin1String key)
//靜態(tài)函數(shù)
QJsonObject fromVariantHash(const QVariantHash &hash)
QJsonObject fromVariantMap(const QVariantMap &map)

4.QJsonDocument:(橋梁,轉(zhuǎn)換器作用)

它封裝了一個完整的Json文檔,并且可以從UTF-8編碼的基于文本的表示以及Qt自己的讀取和寫入該文檔 

//構(gòu)造函數(shù)
QJsonDocument()
QJsonDocument(const QJsonObject &object)  //用QJsonObject初始化
QJsonDocument(const QJsonArray &array)  //用qjsonArray初始化
QJsonDocument(const QJsonDocument &other) //復(fù)制構(gòu)造函數(shù)
~QJsonDocument()
QJsonArray array() const   //轉(zhuǎn)換為QJsonArray
//公共函數(shù)
//判斷函數(shù)
bool isArray() const
bool isEmpty() const
bool isNull() const
bool isObject() const
//轉(zhuǎn)換函數(shù)
QJsonObject object() const // 轉(zhuǎn)換為QJsonObject
const char *rawData(int *size) const
void setArray(const QJsonArray &array)
void setObject(const QJsonObject &object)
QByteArray toBinaryData() const  //轉(zhuǎn)換為二進制數(shù)據(jù)
QByteArray toJson(JsonFormat format = Indented) const  //轉(zhuǎn)換為文本文件
QVariant toVariant() const
bool operator!=(const QJsonDocument &other) const
QJsonDocument &operator=(const QJsonDocument &other)
bool operator==(const QJsonDocument &other) const
//靜態(tài)函數(shù)
QJsonDocument fromBinaryData(const QByteArray &data, DataValidation validation = Validate) //從二進制文件中讀取數(shù)據(jù)
QJsonDocument fromJson(const QByteArray &json, QJsonParseError *error = Q_NULLPTR)//從Json文件中讀取數(shù)據(jù)
QJsonDocument fromRawData(const char *data, int size, DataValidation validation = Validate)
QJsonDocument fromVariant(const QVariant &variant)
 

5.QJsonParseError:(Json錯誤)

用于報告JSON解析期間的錯誤 

//公共函數(shù)
QString errorString() const  //Returns the human-readable message appropriate to the reported JSON parsing error.

三、在Qt中實現(xiàn)Json操作的示例

#include <QCoreApplication>
#include<QJsonValue>
#include<QJsonObject>
#include<QJsonArray>
#include<QDebug>
#include<iostream>
#include<QJsonDocument>
#include<QFile>
#include<QSettings>
using namespace  std;
int number; //全局變量,記錄文件名后綴
QSettings settings("./config.ini",QSettings::IniFormat); //配置文件ini
void WriteJson();//寫文件
void ReadJson();//讀文件
void RecordNumber();//通過配置文件config.ini獲取當前的number值
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    RecordNumber();
    WriteJson();
    system("pause");
    return a.exec();
}
void RecordNumber(){
    number=settings.value("number").toUInt();//通過配置文件config.ini獲取當前的number值
}
void WriteJson(){
   QJsonObject obj;//json對象
   //json對象插入值,按照紅黑樹排序
   obj.insert("Name","Ace");
   obj.insert("Sex","man");
   obj.insert("Age",20);
   QJsonObject subObj;//json對象
   subObj.insert("Father","Gol·D·Roger");
   subObj.insert("Mother","Portgas·D·Rouge");
   QJsonArray  array;//json數(shù)組
   array.append("Sabo");
   array.append("Monkey D. Luffy");
   //在json對象中嵌套數(shù)組
   subObj.insert("Brother",array);
   //在json對象中嵌套json對象
   obj.insert("Family",subObj);
   obj.insert("IsAlive",false);
   obj.insert("comment","yyds");
   QJsonObject objstart;
   objstart.insert("all",obj);//在json對象中嵌套對象
   objstart.insert("format","json");
   QJsonDocument doc(objstart);//將json對象轉(zhuǎn)換為jsonDocument
   QByteArray json=doc.toJson();//轉(zhuǎn)換為json文件
   QFile file(QString::asprintf("C:\\Users\\Administrator\\Desktop\\ace%d.json",number++));//創(chuàng)建json文件
   settings.setValue("number",number);//配置文件中的number值++
   file.open(QIODevice::WriteOnly|QIODevice::Text);
   file.write(json,json.length());//將json字節(jié)數(shù)組寫到文件 當中
   file.close(); //關(guān)閉文件
}
void ReadJson(){
}

 得到如下的json文件:

總結(jié)

在保存json文件時候,json與文件溝通的橋梁QJsonDocument,將json數(shù)據(jù)轉(zhuǎn)換為QByteArray(即字節(jié)數(shù)組),然后保存到.json文件當中。

到此這篇關(guān)于在Qt中實現(xiàn)關(guān)于Json 的操作的文章就介紹到這了,更多相關(guān)Qt中Json 操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論