OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3321|回复: 11

STM32使用cJSON问题,部分无法正常解析,求教!!!

[复制链接]

1

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-3-4
在线时间
3 小时
发表于 2020-3-4 11:10:39 | 显示全部楼层 |阅读模式
大家好,请教一个cJSON的问题:
我要解析以下的cJSON:

{"devId":"YJDC65006484",
"txnNo":"1579071697065",
"msgType":500,
"paramList":[
{"devId":"YJDC84022546","id":"05201001","value":0},
{"devId":"YJDC84022546","id":"05011001","value":"24935711"},
{"devId":"YJDC84022546","id":"05013001","value":9345}]}


我的代码如下:
    cJSON *json;
    //char *out;

    json = cJSON_Parse( text );                        //

    if(json == NULL)
            printf("json fmt error:%s\n.", cJSON_GetErrorPtr());
    else{
            cJSON *object = cJSON_GetObjectItem(json, "paramList");
               
            cJSON *item = cJSON_GetObjectItem(json, "msgType");
            printf("msgType: %d\n", item->valueint);

            item = cJSON_GetObjectItem(json, "txnNo");
            printf("txnNo: %d\n", item->valueint);

            item = cJSON_GetObjectItem(json, "devId");
            printf("devId: %s\n", item->valuestring);
               
                item = cJSON_GetObjectItem(object, "devId");
            printf("paramList->devId: %s\n", item->valuestring);

            item = cJSON_GetObjectItem(object, "id");
            printf("paramList->id: %s\n", item->valuestring);

            item = cJSON_GetObjectItem(object, "value");
            printf("paramList->value: %d\n", item->valueint);

            cJSON_Delete(json);       
        }


目前能正常解析出:
msgType、txnNo、 devId,但是无法解析出paramList->devId、 paramList->id、 paramList->value
如下图:
QQ截图20200304110745.jpg

还有想解析出paramList下面的三个,代码该怎么实现?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-3-4
在线时间
3 小时
 楼主| 发表于 2020-3-4 13:12:50 | 显示全部楼层
这个问题能帮忙谁能帮忙解答下,谢谢
回复 支持 反对

使用道具 举报

109

主题

5564

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10569
金钱
10569
注册时间
2017-2-18
在线时间
1913 小时
发表于 2020-3-4 15:02:27 | 显示全部楼层
没弄过,帮顶~~
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-3-4
在线时间
3 小时
 楼主| 发表于 2020-3-4 15:44:25 | 显示全部楼层

正愁着呢,哪位高手帮指点指点,谢谢。
回复 支持 反对

使用道具 举报

3

主题

1155

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
7464
金钱
7464
注册时间
2015-1-15
在线时间
1368 小时
发表于 2020-3-4 17:08:22 | 显示全部楼层
cJSON信息有问题,"24935711"是字符串?
一分耕耘一分收获。
回复 支持 反对

使用道具 举报

36

主题

162

帖子

0

精华

高级会员

Rank: 4

积分
943
金钱
943
注册时间
2015-11-24
在线时间
162 小时
发表于 2020-3-4 18:26:55 | 显示全部楼层
代码错了, item = cJSON_GetObjectItem(object, "devId");  ,paramList为对象数组,后面的解析应该为item = cJSON_GetObjectItem(object->child, "devId");
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-3-4
在线时间
3 小时
 楼主| 发表于 2020-3-5 08:18:58 | 显示全部楼层
yklstudent 发表于 2020-3-4 17:08
cJSON信息有问题,"24935711"是字符串?

那个value的值我用的是int类型的
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-3-4
在线时间
3 小时
 楼主| 发表于 2020-3-5 08:20:25 | 显示全部楼层
gangzilife 发表于 2020-3-4 18:26
代码错了, item = cJSON_GetObjectItem(object, "devId");  ,paramList为对象数组,后面的解析应该为item ...

目前可以解析出第一个数组的数据,那第二、第三个数组该如何解析呢?帮忙指点下,谢谢!!
回复 支持 反对

使用道具 举报

34

主题

322

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1837
金钱
1837
注册时间
2014-12-4
在线时间
717 小时
发表于 2020-3-5 11:12:50 | 显示全部楼层
        if ((sub_child_object = cJSON_GetArrayItem(paramList, 0)) != NULL)
                                {
                                        //
                                        if ((child_Item = cJSON_GetObjectItem(sub_child_object, "devId")) != NULL)
                                        {
                                                printf("devId%s\r\n", i, child_Item->string, child_Item->valuestring);
                                        }
}
这样试试        要先获取数组 然后在获取数组里的对象   
回复 支持 反对

使用道具 举报

34

主题

322

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1837
金钱
1837
注册时间
2014-12-4
在线时间
717 小时
发表于 2020-3-5 11:14:27 | 显示全部楼层
数组内多组对象获取可以看下这个https://blog.csdn.net/fengxinlinux/article/details/53121287
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-3-4
在线时间
3 小时
 楼主| 发表于 2020-3-5 11:47:06 | 显示全部楼层
loudianxin 发表于 2020-3-5 11:12
if ((sub_child_object = cJSON_GetArrayItem(paramList, 0)) != NULL)
                                {
                                        //

好的,我试试,谢谢。
回复 支持 反对

使用道具 举报

1

主题

7

帖子

0

精华

新手入门

积分
14
金钱
14
注册时间
2020-3-4
在线时间
3 小时
 楼主| 发表于 2020-3-5 11:47:39 | 显示全部楼层
loudianxin 发表于 2020-3-5 11:14
数组内多组对象获取可以看下这个https://blog.csdn.net/fengxinlinux/article/details/53121287

我参考参考,多谢
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-21 15:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表