一、解析JSON格式数据/ W( |1 E: ]: o/ I
$ e' W% t* S9 ^) s( b* W% c- //需要解析的字符串
, U1 q) ?" \# H* ? - 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
- int main(void)
" g( n5 [/ n3 i0 m, q- o# Q, @ - {
; N7 ^8 M2 q7 f. D8 e N - cJSON *root; ; u+ ?9 ?2 L+ U% O
- cJSON *jsonAction;
5 u5 X6 Y* d7 A2 X; B - cJSON *jsonRWAddr;# _" r4 x5 O% w$ f' |( g2 }! c$ l, k
- % T" A' I: K# Z; J+ H
- while(1)
2 Z: h2 E; J! p$ k: y& n1 i* { - {
' H+ D- W* u& ? - root=cJSON_Parse((const char *)str);
1 R( B+ F7 w2 ]+ G+ l - jsonAction = cJSON_GetObjectItem(root,"action"); //获取动作* ^. u% z4 n: ?5 v- k, a
- if(strcmp(jsonAction->valuestring,"writePara")==NULL) //写参数
0 e" Z& X- W' A$ h6 [% _ - {' z- p7 _# k3 w* k" o
- jsonRWAddr = cJSON_GetObjectItem(root,"writeId"); //获取读的ID
5 g% o) {5 S! _6 q; R - modbusReadWriteAddr = atoi16(jsonRWAddr->valuestring,10); //将ID转为int
9 }" J+ n; V& E# @; A - }
5 z1 p& L6 x8 W4 A7 M - cJSON_Delete(root);
6 O6 \) s$ u8 N1 ]& o - cJSON_Delete(jsonAction);
4 a. W; [' w$ z( e - cJSON_Delete(jsonRWAddr);$ n Q# t* U/ t* K0 D" {" ?
d5 H1 h1 Z' x- }
/ M& G' R* R( g; v4 ^ - }: 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- int main(void)
# D; H2 L- m: U( ?3 \/ [ - {
9 k. K/ b$ D5 n. S - char *jsonValue;8 E' f0 W4 N$ X0 F
- cJSON *jsonCreat;' H8 d' V0 @4 d0 s& H/ Z$ Q! x
- cJSON *jsonCreatValue;3 V7 X0 b2 H. p& X! M* x# w0 E
- 5 |- m2 z5 t$ h& F. C( n. l7 Y
- jsonCreat = cJSON_CreateObject();//创建一个json对象6 q) t- @( T7 W* c& H
- jsonCreatValue = cJSON_CreateObject();//创建一个json对象2 ?# ]3 R1 } B6 Y3 \0 M5 `
- # [" R& ?( ^0 _! o
- cJSON_AddItemToObject(jsonCreat, "action", cJSON_CreateString("readPara"));, p: d6 E. M, `* M6 N
- cJSON_AddItemToObject(jsonCreatValue, "id", cJSON_CreateString("1"));- D ]4 a$ @( T6 v/ v
- cJSON_AddItemToObject(jsonCreat, "value", jsonCreatValue); & ~, x6 u+ o9 N1 t
- + u( p; F3 D! g
- jsonValue=cJSON_Print(jsonCreat);//打印生成JSON格式数据
8 q Y, e. D1 r: k( c. h/ l3 d - $ y' J! X1 s. ^) X$ N
- cJSON_Delete(jsonCreat);! N6 T& ~- I" }" m$ z Z
- cJSON_Delete(jsonCreatValue);
, E' }" N) x, [" h - printf("%s\r\n",jsonValue);( U( X! ~; e$ |* x. ?
- while(1)! F, [5 O* ?7 h4 R4 F% m
- {
7 j& Q4 f1 h. j8 _ -
4 k% U) {+ P$ \; n5 [; Q - }
: d* {3 q; f3 n% R u- {8 ^ - ! j/ W0 g1 ^; ~/ b& U/ {
- }5 F6 D3 |/ d. j" r% p+ [% y
. O' Q; t4 { ]6 j+ {- 生成的字符串6 x+ C' J; I% v$ z0 b; J0 J
- {action:readPara,value{id:1}}2 a% ?6 j- O, V2 b/ N' \7 j
- , |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# |
|