简介
准备在开发板中使用json结构传送数据, 选用了cJson, 现在看下cJson的使用吧
步骤
下载
git clone https://github.com/DaveGamble/cJSON
或者直接压缩包下载也行, 毕竟国内有时候下载不下来
Qt 中使用cJson
在下载的cJson 目录中加入cJson.pri, 内容如下
INCLUDEPATH += $$PWD
HEADERS += \$$PWD/cJSON.h \$$PWD/cJSON_Utils.h \$$PWD/cJSON_util.hSOURCES += \$$PWD/cJSON.c \$$PWD/cJSON_Utils.c
创建一个Qt工程, .pro中加入cJson.pri
例如 include(E:\workspace\cJson\cJSON\cJson.pri)
json结构解析代码
QByteArray jsonData = "{"start_x": 1,"start_y": 2,"width": 100,"height": 100,"img_data": [2,3,4,5]
}";
cJSON *json = cJSON_Parse((const char*)jsonData.data());if (NULL == json){logger("parse failed!");return;}cJSON *tempJson = json->child;QString printString;/* 打印一下最外层的json数据 */do{printString.append(QString("name: %1, ").arg(QString::fromStdString(tempJson->string))); // 打印名称switch (tempJson->type){case cJSON_Invalid:printString.append(QString("cJSON_Invalid"));break;case cJSON_False:printString.append(QString("cJSON_False"));break;case cJSON_True :printString.append(QString("cJSON_True"));break;case cJSON_NULL :printString.append(QString("cJSON_NULL"));break;case cJSON_Number :printString.append(QString("cJSON_Number, %1").arg(tempJson->valueint));break;case cJSON_String :printString.append(QString("cJSON_String, %1").arg(QString::fromStdString(tempJson->valuestring)));break;case cJSON_Array :printString.append(QString("cJSON_Array"));break;case cJSON_Object :printString.append(QString("cJSON_Object"));break;case cJSON_Raw :printString.append(QString("cJSON_Raw"));break;default:break;}logger(printString);printString.clear();tempJson = tempJson->next;} while(tempJson);delete json;json = NULL;
测试 json 结构
{
“start_x”: 1,
“start_y”: 2,
“width”: 100,
“height”: 100,
“img_data”: [4, 3, 2, 1]
}
打印信息
name: start_x, cJSON_Number, 1
name: start_y, cJSON_Number, 2
name: width, cJSON_Number, 100
name: height, cJSON_Number, 100
name: img_data, cJSON_Array