當前位置:成語大全網 - 新華字典 - 請教Qt如何解析出Json的數據

請教Qt如何解析出Json的數據

JSON(JavaScript Object Notation)是壹種輕量級的數據交換格式。它基於JavaScript(Standard ECMA-262 3rd Edition - December 1999)的壹個子集。 JSON采用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成為理想的數據交換語言。易於人閱讀和編寫,同時也易於機器解析和生成。

常用的Json庫

JsonCpp

JsonCpp是壹個C++用來處理JSON數據的開發包。

網址:/.

cJSON

cJSON是壹個超輕巧,攜帶方便,單文件,簡單的可以作為ANSI-C標準的JSON解析器。

網址:/projects/cjson/.

QJson

QJson是壹個基於Qt的開發包用來將JSON數據解析成QVariant對象,JSON的數組將被映射為QVariantList實例,而其他對象映射為QVariantMap實例。

網址:/.

關於Qt中對JSON的生成與解析,Qt5以前的版本,需要去進行單獨下載、編譯,才能使用。到了Qt5,提供了專門的QJsonDocument類來讀取和寫入JSON文檔。

Qt5中JSON的生成與解析

QJsonDocument

QJsonDocument既可以從壹個基於文本表示的UTF-8編碼,又可以從Qt自己的二進制格式讀取和寫入這個文件。

JSON文檔可以從它的基於文本的表示使用QJsonDocument::fromJson()轉換為QJsonDocument,用.toJSON()將其轉換回文字。解析器非常快速和高效,將JSON轉換為二進制表示。

QJsonObject

QJsonObject類用於封裝JSON對象。

JSON對象是鍵值對,其中鍵是唯壹的字符串,其值由QJsonValue代表。壹個QJsonObject可以從QVariantMap轉換/被轉換。

QJsonArray

QJsonArray類用於封裝JSON數組。

壹個JSON數組列表值。該列表可以通過從陣列插入和移除QJsonValue的操縱。壹個QJsonArray可以從QVariantList轉換為/被轉換。

QJsonDocument有效解析後的文檔可以使用!iSNull()判斷。使用isArray()和isObject()來判斷是否包含壹個數組或對象。文檔中包含的數組或對象可以使用array()或object()進行檢索,然後讀取或操縱。

示例

QJsonObject

(1)生成Json

QJsonObject json;

json.insert("name", QString("Qt"));

json.insert("version", 5);

json.insert("windows", true);

QJsonDocument document;

document.setObject(json);

QByteArray byte_array = document.toJson(QJsonDocument::Compact);

QString json_str(byte_array);

結果:

json_str:{"name": "Qt","version": 5,"windows": true}

(2)解析Json

QJsonParseError json_error;

QJsonDocument parse_doucment = QJsonDocument::fromJson(byte_array, &json_error);

if(json_error.error == QJsonParseError::NoError)

{

if(parse_doucment.isObject())

{

QJsonObject obj = parse_doucment.object();

if(obj.contains("name"))

{

QJsonValue name_value = obj.take("name");

if(name_value.isString())

{

QString name = name_value.toString();

}

}

if(obj.contains("version"))

{

QJsonValue version_value = obj.take("version");

if(version_value.isDouble())

{

int version = version_value.toVariant().toInt();

}

}

if(obj.contains("windows"))

{

QJsonValue version_value = obj.take("windows");

if(version_value.isBool())

{

bool flag = version_value.toBool();

}

}

}

}

結果:

name:Qt

version:5

windows:true

QJsonArray

(1)生成Json

QJsonArray json;

json.insert(0, QString("Qt"));

json.insert(1, QString("version"));

json.insert(2, true);

QJsonDocument document;

document.setArray(json);

QByteArray byte_array = document.toJson(QJsonDocument::Compact);

QString json_str(byte_array);

結果:

json_str:["Qt","version",true]

(2)解析Json

QJsonParseError json_error;

QJsonDocument parse_doucment = QJsonDocument::fromJson(byte_array, &json_error);

if(json_error.error == QJsonParseError::NoError)

{

if(parse_doucment.isArray())

{

QJsonArray array = parse_doucment.array();

int size = array.size();

for(int i=0; i

{

QJsonValue value = array.at(i);

if(value.isString())

{

QString name = value.toString();

}

else if(value.isBool())

{

bool flag = value.toBool();

}

}

}

}

結果:

數組不同下標對應的值

0:Qt

1:version

2:true

如上,簡單介紹壹下常用的JSON庫以及Qt中對JSON的生成與解析,如需更多資料請參考官方文檔,還是那句話,沒有比助手更好、更專業的資料了!