您的位置:首页 > Web前端 > JavaScript

stm32 cjson 解析json数据实例

2016-12-06 14:36 369 查看
在单片机使用到json解析数据时,可以直接引用第三方解析库,如cjson。从地址https://github.com/DaveGamble/cJSON下载最新版本,然后从中直接提取cJSON.c、cJSON.h、cJSON_Utils.c和cJSON_Utils.h。由于cjson全部都是用c语言来写,所以单片机一般都可以直接使用。

下面以实际例子来分析一下如何解析json数据:

char* pszJsonText = "{\"result\":{\"id\":1,\"name\":\"aa\",\"datetime\":\"2016-04-25 16:38:54\",\"status\":1}, \
\"code\":10000,\"message\":\"ok\",\"sign\":901498365}";

typedef struct
{
u32 cID;
char *pName;
char *datetime;
u8 cStatus;
}SCAN_CODE_LIST_MEM_TypeDef;

SCAN_CODE_LIST_MEM_TypeDef g_stScanCodeListMem;

u8 ParseScanCodeJson(const char* pszJsonText)
{
cJSON   *root, *result;
u32 code=0;
u8 ret = FALSE;

//将json数据解析成json结构体
root= cJSON_Parse(pszJsonText);

if (root)
{
//从根节点获取code元素的值 int型
code = cJSON_GetObjectItem(root, "code")->valueint;

if(code != 10001)
{
//从根节点获取result节点
result = cJSON_GetObjectItem(root, "result");

if (result)
{
//从result节点获取各个元素的值
g_stScanCodeListMem.cID =  cJSON_GetObjectItem(result, "id")->valueint; //int 型
g_stScanCodeListMem.pName = cJSON_GetObjectItem(result, "name")->valuestring;//字符串型
g_stScanCodeListMem.datetime = cJSON_GetObjectItem(result, "datetime")->valuestring;//字符串型
g_stScanCodeListMem.cStatus = cJSON_GetObjectItem(result, "status")->valueint;//int 型

//保存扫描用户的名字  把id值也作为一个参数存入
WriteScanCodeName(g_stScanCodeListMem.pName, g_stScanCodeListMem.cID);

#ifdef DEBUG_APP_TASK
printf("\r\n");
printf(" cID:%d ", g_stScanCodeListMem.cID);
printf(" pName:%s", g_stScanCodeListMem.pName);
printf(" datetime:%s ", g_stScanCodeListMem.datetime);
printf(" cStatus:%d ", g_stScanCodeListMem.cStatus);
printf("\r\n");
#endif
ret = TRUE;
}
}

//释放资源
cJSON_Delete(root);
}

return ret;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: