你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】STM32利用CJSON库生成和解析JSON格式数据

[复制链接]
STMCU小助手 发布时间:2022-4-21 21:00
一、解析JSON格式数据/ W( |1 E: ]: o/ I

$ e' W% t* S9 ^) s( b* W% c
  1. //需要解析的字符串
    , U1 q) ?" \# H* ?
  2. char *str="{"action":"writePara","value":{"id":"1","frontId":"1","band485":"1200","bandCan":"10","sidewayTime":"10","sidwwaySync":"1","upDownTime":"10","upDownTimeSync":"1","hookMode":"electric","senseMode":"single","isStopCar":"1","originalIsStopCar":"1","isShiftLeft":"1","isShiftRight":"1","isShiftUp":"1","isShiftDown":"1","isRstData":"1"}}";/ d" @+ D" ]$ |- o$ N+ r3 J! d
  3. int main(void)
    " g( n5 [/ n3 i0 m, q- o# Q, @
  4. {        
    ; N7 ^8 M2 q7 f. D8 e  N
  5.         cJSON *root; ; u+ ?9 ?2 L+ U% O
  6.         cJSON *jsonAction;
    5 u5 X6 Y* d7 A2 X; B
  7.         cJSON *jsonRWAddr;# _" r4 x5 O% w$ f' |( g2 }! c$ l, k
  8. % T" A' I: K# Z; J+ H
  9.         while(1)
    2 Z: h2 E; J! p$ k: y& n1 i* {
  10.         {
    ' H+ D- W* u& ?
  11.                 root=cJSON_Parse((const char *)str);
    1 R( B+ F7 w2 ]+ G+ l
  12.                 jsonAction = cJSON_GetObjectItem(root,"action");  //获取动作* ^. u% z4 n: ?5 v- k, a
  13.                 if(strcmp(jsonAction->valuestring,"writePara")==NULL)        //写参数
    0 e" Z& X- W' A$ h6 [% _
  14.                 {' z- p7 _# k3 w* k" o
  15.                         jsonRWAddr = cJSON_GetObjectItem(root,"writeId");  //获取读的ID
    5 g% o) {5 S! _6 q; R
  16.                         modbusReadWriteAddr = atoi16(jsonRWAddr->valuestring,10);                //将ID转为int
    9 }" J+ n; V& E# @; A
  17.                 }
    5 z1 p& L6 x8 W4 A7 M
  18.                 cJSON_Delete(root);
    6 O6 \) s$ u8 N1 ]& o
  19.                 cJSON_Delete(jsonAction);
    4 a. W; [' w$ z( e
  20.                 cJSON_Delete(jsonRWAddr);$ n  Q# t* U/ t* K0 D" {" ?

  21.   d5 H1 h1 Z' x
  22.         }
    / M& G' R* R( g; v4 ^
  23. }: Y1 m7 o* z. [
复制代码
* M* X1 F# v- d
二、生成字符串. r4 Q8 C: \, q' B* R* o$ C

7 c- C" s2 g; k- l# O
  1. int main(void)
    # D; H2 L- m: U( ?3 \/ [
  2. {        
    9 k. K/ b$ D5 n. S
  3.         char *jsonValue;8 E' f0 W4 N$ X0 F
  4.         cJSON *jsonCreat;' H8 d' V0 @4 d0 s& H/ Z$ Q! x
  5.         cJSON *jsonCreatValue;3 V7 X0 b2 H. p& X! M* x# w0 E
  6. 5 |- m2 z5 t$ h& F. C( n. l7 Y
  7.         jsonCreat = cJSON_CreateObject();//创建一个json对象6 q) t- @( T7 W* c& H
  8.         jsonCreatValue = cJSON_CreateObject();//创建一个json对象2 ?# ]3 R1 }  B6 Y3 \0 M5 `
  9.         # [" R& ?( ^0 _! o
  10.         cJSON_AddItemToObject(jsonCreat, "action", cJSON_CreateString("readPara"));, p: d6 E. M, `* M6 N
  11.         cJSON_AddItemToObject(jsonCreatValue, "id", cJSON_CreateString("1"));- D  ]4 a$ @( T6 v/ v
  12.         cJSON_AddItemToObject(jsonCreat, "value", jsonCreatValue);        & ~, x6 u+ o9 N1 t
  13. + u( p; F3 D! g
  14.         jsonValue=cJSON_Print(jsonCreat);//打印生成JSON格式数据
    8 q  Y, e. D1 r: k( c. h/ l3 d
  15.         $ y' J! X1 s. ^) X$ N
  16.         cJSON_Delete(jsonCreat);! N6 T& ~- I" }" m$ z  Z
  17.         cJSON_Delete(jsonCreatValue);
    , E' }" N) x, [" h
  18.         printf("%s\r\n",jsonValue);( U( X! ~; e$ |* x. ?
  19.         while(1)! F, [5 O* ?7 h4 R4 F% m
  20.         {
    7 j& Q4 f1 h. j8 _
  21.         
    4 k% U) {+ P$ \; n5 [; Q
  22.         }
    : d* {3 q; f3 n% R  u- {8 ^
  23. ! j/ W0 g1 ^; ~/ b& U/ {
  24. }5 F6 D3 |/ d. j" r% p+ [% y

  25. . O' Q; t4 {  ]6 j+ {
  26. 生成的字符串6 x+ C' J; I% v$ z0 b; J0 J
  27. {action:readPara,value{id:1}}2 a% ?6 j- O, V2 b/ N' \7 j
  28. , |8 z2 d. H( z- P. }
复制代码
  B! d- X% S9 Z( @5 {$ `  w0 F
三、CJSON使用注意点; l: e2 p9 _- f' t8 ~2 r- m
解析生成字符串需要的堆栈比较大,需要把STM32的堆栈搞大一点+ Z5 c6 `% ?: H2 o

- c+ I7 h  x# c: f, z9 {, v$ j/ n9 ?! N5 D2 R2 h! J# |
赞 收藏 评论0 发布时间:2022-4-21 21:00

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版