简介
准备在开发板中使用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.h
SOURCES += \
$$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