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æ°æ®çå¼åå
ã
ç½åï¼
http://jsoncpp.sourceforge.net/.cJSON
cJSONæ¯ä¸ä¸ªè¶
轻巧ï¼æºå¸¦æ¹ä¾¿ï¼åæ件ï¼ç®åçå¯ä»¥ä½ä¸ºANSI-Cæ åçJSON解æå¨ã
ç½åï¼
http://sourceforge.net/projects/cjson/.QJson
QJsonæ¯ä¸ä¸ªåºäºQtçå¼åå
ç¨æ¥å°JSONæ°æ®è§£ææQVariant对象ï¼JSONçæ°ç»å°è¢«æ å°ä¸ºQVariantListå®ä¾ï¼èå
¶ä»å¯¹è±¡æ å°ä¸ºQVariantMapå®ä¾ã
ç½åï¼
http://qjson.sourceforge.net/. å
³äº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ççæä¸è§£æï¼å¦éæ´å¤èµæ请åèå®æ¹ææ¡£ï¼è¿æ¯é£å¥è¯ï¼æ²¡ææ¯å©ææ´å¥½ãæ´ä¸ä¸çèµæäºï¼