欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

柚子快報(bào)邀請(qǐng)碼778899分享:Qt天氣預(yù)報(bào)系統(tǒng)之JSON

柚子快報(bào)邀請(qǐng)碼778899分享:Qt天氣預(yù)報(bào)系統(tǒng)之JSON

http://yzkb.51969.com/

1、什么是JSON?

JSON(JavaScript Object Notation)是一種輕量級(jí)的、通用的數(shù)據(jù)格式,可供各式各樣的客戶(hù)端和服務(wù)端進(jìn)行通信;

JSON本質(zhì)上是一種特殊格式的字符串

它有以下特點(diǎn):

便于閱讀書(shū)寫(xiě)

? ? ? ? 除了JSON格式,還有一種數(shù)據(jù)傳輸格式XML(Qt的ui文件就是XML格式);相對(duì)于XML,JSON更加利于閱讀

獨(dú)立于編程語(yǔ)言

? ? ? ? 幾乎在所有的編程語(yǔ)言和開(kāi)發(fā)環(huán)境中,都有解析和生成JSON字符串的庫(kù)

# C

Jansson,cJSON

# C++

jsonCpp,JSON for Modern C++

# Java

json-lib,org-json

# Android

Gson FastJson

# Qt

QJsonXxx

網(wǎng)絡(luò)傳輸?shù)臉?biāo)準(zhǔn)格式

? ? ? ? 基于以上特點(diǎn),JSON成為了網(wǎng)絡(luò)傳輸使用率最高的數(shù)據(jù)格式

2、JSON的兩種數(shù)據(jù)格式

JSON有兩種數(shù)據(jù)格式

JSON對(duì)象JSON數(shù)組

規(guī)則:被大括號(hào)包裹的是JSON對(duì)象;被中括號(hào)包裹的是JSON數(shù)組

2.1 JSON數(shù)組

JSON數(shù)組格式

[元素1,元素2,元素3,...,元素n]

?此處的元素可以是不同的數(shù)據(jù)類(lèi)型,包括:整形、浮點(diǎn)、字符串、布爾、JSON數(shù)組、JSON對(duì)象、空值

[ 1,2.5,“hello”,true,null ]

?JSON數(shù)組嵌套

[

? ? ? ? [ 1,2,3 ],

? ? ? ? [ "hello","my","baby" ],

? ? ? ? [ 1,2.5,“hello”,true,null ]

]

JSON數(shù)組嵌套對(duì)象

[

? ? ? ? {

? ? ? ? ? ? ? ? "name" : "Tom",

? ? ? ? ? ? ? ? "age" : 18

????????}

????????{

? ? ? ? ? ? ? ? "name" : "Jim",

? ? ? ? ? ? ? ? "age"? ?: 19

????????}

]?

?2.2 JSON對(duì)象

JSON對(duì)象格式:

{

? ? ? ? "key1" : value1,

????????"key2" : value2,

????????"key3" : value3

}

?鍵key是標(biāo)準(zhǔn)的字符串類(lèi)型,值value可以是:整形、浮點(diǎn)、字符串、布爾、JSON數(shù)組、JSON對(duì)象、空值

{ ?? ?"name": "China", ?? ?"info": { ?? ??? ?"capital": "beijing ", ?? ??? ?"asian": true, ?? ??? ?"founded": 1949 ?? ?}, ?? ?"provinces": [{ ?? ??? ??? ?"name": "shandong ", ?? ??? ??? ?"capital": "jinan" ?? ??? ?}, ?? ??? ?{ ?? ??? ??? ?"name": "guangdong ", ?? ??? ??? ?"capital": "guangzhou" ?? ??? ?} ?? ?] }

2.3 JSON的在線(xiàn)解析

JSON在線(xiàn)解析工具1

JSON在線(xiàn)解析工具2

3、Qt中使用JSON?

3.1JSON相關(guān)的類(lèi)

QJsonObjectQJsonArrayQJsonValueQJsonDocument

?(1)QJsonObject

QJsonObject封裝了JSON中的對(duì)象,可以存儲(chǔ)多個(gè)鍵值對(duì)。

其中鍵為字符串類(lèi)型,值為QJsonValue類(lèi)型

創(chuàng)建一個(gè)QJsonObject對(duì)象

QJsonObject::QJsonObject();

將鍵值添加到QJsonObject對(duì)象中

QJsonObject::iterator insert(const QString &key,const QJsonValue &value);

獲取QJsonObject對(duì)象中的鍵值對(duì)個(gè)數(shù)

int QJsonObject::count() const;

int QJsonObject::size() const;

int QJsonObject::length() const;

通過(guò)key獲得value的值

QJsonValue QJsonObject::value(const QString &key) const;

QJsonValue QJsonObject::operator[](const QString &key) const;

檢查key是否存在

iterator QJsonObject::find(const QString &key);

boll QJsonObject::contains(const QString &key) const;

遍歷key?

QStringList QJsonObject::keys() const;

(2)QJsonArray

?創(chuàng)建一個(gè)QJsonArray

QJsonArray::QJsonArray();

添加數(shù)組元素

//添加到頭部和尾部

void QJsonArray::append(const QJsonValue &value);

void QJsonArray::prepend(const QJsonValue &value);

//插入到i的位置之前

void QJsonArray::insert(int i,const QJsonValue &value);

//添加到頭部和尾部

void QJsonArray::push_front(const QJsonValue &value);

void QJsonArray::push_back(const QJsonValue &value);

獲取QJsonArray元素個(gè)數(shù)

int QJsonArray::count() const;

int QJsonArray::size() const;

獲取元素的值

//獲取頭部和尾部的值

QJsonValue QJsonArray::first() const;

QJsonValue QJsonArray::last() const;

//獲取指定位置的值

QJsonValue QJsonArray::at(int i) const;

QJsonValueRef QJsonArray::operator[](int i);

刪除元素

//刪除頭部和尾部

void QJsonArray::pop_front(;

void QJsonArray::pop_back();

void QJsonArray::removeFirst();

void QJsonArray::removeLast();

//刪除指定位置

void QJsonArray::removeAt(int i);

QJsonValue QJsonArray::takeAt(int i);

(3)QJsonValue

封裝了6種數(shù)據(jù)類(lèi)型

# 布爾

QJsonValue::Bool

# 浮點(diǎn)類(lèi)型(包括整形)

QJsonValue::Double

# 字符串類(lèi)型

QJsonValue::String

# Json數(shù)組類(lèi)型

QJsonValue::Array

# Json對(duì)象類(lèi)型

QJsonValue::Object

# 空值類(lèi)型

QJsonValue::Null

通過(guò)以下方式來(lái)構(gòu)造QJsonValue對(duì)象

字符串

QJsonValue(const char *s);

QJsonValue(QLatinlString s);

QJsonValue(const QString &s);

整形or浮點(diǎn)型

QJsonValue(qint64 v);

QJsonValue(int v);

QJsonValue(double v);

布爾

QJsonValue(bool b);

Json對(duì)象

QJsonValue(const QJsonObject &o);

Json數(shù)組

QJsonValue(const QJsonArray &a);

空值類(lèi)型

QJsonValue(QJsonValue::Type type = Null);

如果已經(jīng)得到了QJsonValue如何判斷內(nèi)部封裝的是什么類(lèi)型的數(shù)據(jù)?

bool isString() const;

bool isDouble() const;

bool isBool() const;

bool isObject() const;

bool isArray() const;

bool isUndefined() const;

bool isNull() const;

通過(guò)以上判斷函數(shù)以后,如果有需求可以將其轉(zhuǎn)換為對(duì)應(yīng)的基礎(chǔ)數(shù)據(jù)類(lèi)型,對(duì)應(yīng)的API函數(shù)如下:

轉(zhuǎn)換為字符串

Qstring toString() const;

Qstring toString(const QString &defaultValue) const;

轉(zhuǎn)換為浮點(diǎn)

double toDouble(double defaultValue = 0) const;

轉(zhuǎn)換為整型

int toInt(int defaultValue = 0) const

轉(zhuǎn)換為布爾

bool toBoll(bool defaultValue = false) const;

轉(zhuǎn)換為Json對(duì)象

QJsonObject toObject(const QJsonObject &defaultValue) const;

QJsonObject toObject() const;

轉(zhuǎn)換為Json數(shù)組?

QJsonArray toArray(const QJsonArray &defaultValue) const;

QJsonArray toArray() const;

(4)QJsonDocument

它封裝了一個(gè)完整的JSON文檔

它可以從UTF-8編碼的基于文本表示,以及Qt本身的二進(jìn)制格式讀取和寫(xiě)入文檔

QJsonObject和QJsonArray這兩個(gè)是無(wú)法直接轉(zhuǎn)換為字符串類(lèi)型的,需要通過(guò)QJsonDocument類(lèi)來(lái)完成二者的轉(zhuǎn)換

QJsonObject和QJsonArray? ?=>? 字符串

1、創(chuàng)建QJsonDocument對(duì)象

QJsonDocument::QJsonDocument(const QJsonObject &object);

QJsonDocument::QJsonDocument(const QJsonArray &array);

2、將QJsonDocument對(duì)象數(shù)據(jù)序列化

QByteArray QJsonDocment::toBinaryData() const;? ? ? ?//二進(jìn)制格式的Json字符串

QByteArray QJsonDocment::toJson(JsonFormat format = Indented) const; //文本格式

3、使用得到的字符串進(jìn)行數(shù)據(jù)傳輸或者保存到文件

字符串 =>? QJsonObject和QJsonArray

1、將Json字符串 => QJsonDocument對(duì)象

[static]QJsonDocument QJsonDocument::fromBinaryData(const QByteArray &data, Datavalidation validation = Validate): [static] QJsonDocument QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error = Q_NULLPTR);

2、將文檔對(duì)象轉(zhuǎn)換為json數(shù)組/對(duì)象

2.1判斷文檔中存儲(chǔ)的數(shù)據(jù)是JSON數(shù)組還是對(duì)象

bool QJsonDocument::isArray() const;

bool QJsonDocument::isObject() const;

2.2轉(zhuǎn)換為JSON數(shù)組或?qū)ο?/p>

QJsonObject?QJsonDocument::array() const;

QJsonArray QJsonDocument::object() const;

3、調(diào)用QJsonArray/QJsonObject類(lèi)提供的API獲取存儲(chǔ)在里面的數(shù)據(jù)

4、JSON實(shí)戰(zhàn)?

4.1 構(gòu)建JSON字符串

實(shí)現(xiàn)效果

{ ?? ?"name": "China", ?? ?"info": { ?? ??? ?"capital": "beijing ", ?? ??? ?"asian": true, ?? ??? ?"founded": 1949 ?? ?}, ?? ?"provinces": [{ ?? ??? ??? ?"name": "shandong ", ?? ??? ??? ?"capital": "jinan" ?? ??? ?}, ?? ??? ?{ ?? ??? ??? ?"name": "guangdong ", ?? ??? ??? ?"capital": "guangzhou" ?? ??? ?} ?? ?] }

#include

#include

#include

#include

#include

#include

void writeJson() {

QJsonObject rootObj;

//1.插入name字段

rootObj.insert("name", "China");

//2 插入info字段

QJsonObject infoObj;

infoObj.insert("capital", "beijing");

infoObj.insert("asian", true);

infoObj.insert("founded", 1949);

rootObj.insert("info", infoObj);

//3 插入provinces字段

QJsonArray provinceArr;

QJsonObject SdObj;

QJsonObject GdObj;

SdObj.insert("name", "shandong");

SdObj.insert("capital", "jinan");

GdObj.insert("name", "guangdong");

GdObj.insert("capital", "guangzhou");

provinceArr.append(SdObj);

provinceArr.prepend(GdObj);

rootObj.insert("province", provinceArr);

//4 將rootObj轉(zhuǎn)化為json字符串

QJsonDocument doc(rootObj);

QByteArray json = doc.toJson();

//5 打印輸出

qDebug() << QString(json).toUtf8().data();

//6 將json字符串寫(xiě)入到文件

QFile file("d:\\QtTest\\china.json");

file.open(QFile::WriteOnly);

file.write(json);

file.close();

//文件可以使用NotePad++打開(kāi)

}

int main(int argc, char* argv[])

{

QCoreApplication a(argc, argv);

writeJson();

return a.exec();

}

小插曲,配置VS大法配置Qt環(huán)境

B站下載安裝第一步

CSDN使用配置第二步

4.2解析JSON字符串

#include

#include

#include

#include

#include

#include

void fromJson() {

//1.讀取文件

QFile file("d:\\QtTest\\china.json");

file.open(QFile::ReadOnly);

QByteArray json = file.readAll();

file.close();

QJsonDocument doc = QJsonDocument::fromJson(json);

if (!doc.isObject()) {

qDebug() << "Not an object!";

return;

}

QJsonObject obj = doc.object();

QStringList keys = obj.keys();

for (int i = 0; i < keys.size(); i++) {

//獲取key-value

QString key = keys[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.toInt();

}

else if (value.isObject()) {

qDebug() << key << ":";

QJsonObject infoObj = value.toObject();

QString capital = infoObj["capital"].toString();

bool asian = infoObj["asian"].toBool();

int founded = infoObj["founded"].toInt();

qDebug() << " " << "capital" << ":" << capital;

qDebug() << " " << "asian" << ":" << asian;

qDebug() << " " << "founded" << ":" << founded;

}

else if (value.isArray()) {

QJsonArray provinceArray = value.toArray();

qDebug() << key << ":";

for (int i = 0; i < provinceArray.size(); i++) {

QJsonObject provinceObj = provinceArray[i].toObject();

QString name = provinceObj["name"].toString();

QString capital = provinceObj["capital"].toString();

qDebug() << " " << "name" << ":" << name << ", capital" << ":" << capital;

}

}

}

}

int main(int argc, char* argv[])

{

QCoreApplication a(argc, argv);

fromJson();

return a.exec();

}

5、筆記來(lái)源于B站明王

柚子快報(bào)邀請(qǐng)碼778899分享:Qt天氣預(yù)報(bào)系統(tǒng)之JSON

http://yzkb.51969.com/

好文推薦

評(píng)論可見(jiàn),查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19245290.html

發(fā)布評(píng)論

您暫未設(shè)置收款碼

請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪(fǎng)問(wèn)

文章目錄