更新时间:2022-02-24 GMT+08:00

Json组件使用说明

该组件为Agent Lite提供给开发者的工具组件,如果开发者无法进行Json格式的编码和解码,则可以使用该组件进行编码和解码。主要用于上报数据组装与下发命令解析。

1. Json编码

使用Json组件进行编码的流程。

创建Json编码对象。

1
HW_JSONOBJ HW_JsonObjCreate()

获取Json对象根节点。

1
HW_JSON HW_JsonGetJson(HW_JSONOBJ hjson)

往Json对象中添加键值对:

添加pcVal为字符串的Json键值对。

1
HW_INT HW_JsonAddStr(HW_JSON pstJson, HW_CHAR *pcKey, HW_CHAR *pcVal)

添加uiVal为整数的Json键值对。

1
HW_INT HW_JsonAddUint(HW_JSON pstJson, HW_CHAR *pcKey, HW_UINT uiVal)

添加bVal为bool的Json键值对。

1
HW_INT HW_JsonAddBool(HW_JSON pstJson, HW_CHAR *pcKey, HW_BOOL bVal)

添加值为Json的Json键值对,获取到的为子Json对象。

1
HW_JSON HW_JsonAddJson(HW_JSON pstJson, HW_CHAR *pcKey)

添加值为Json数组Json键值对,获取到的为子Json数组对象。

1
HW_JSON_ARRAY HW_JsonAddArray(HW_JSON pstJson, HW_CHAR *pcKey)

往Json数组中添加键值对:

添加pcVal为字符串的Json键值对。

1
HW_INT HW_JsonArrayAddStr(HW_JSON_ARRAY *pstArray, HW_CHAR *pcKey, HW_CHAR *pcVal)

添加uiVal为整数的Json键值对。

1
HW_INT HW_JsonArrayAddUint(HW_JSON_ARRAY *pstArray, HW_CHAR *pcKey, HW_UINT uiVal)

添加bVal为bool的Json键值对。

1
HW_INT HW_JsonArrayAddBool(HW_JSON_ARRAY *pstArray, HW_CHAR *pcKey, HW_BOOL bVal)

添加pucValue为Json的Json值,获取到的为子Json对象。

1
HW_JSON HW_JsonArrayAddJson(HW_JSON_ARRAY pstArray)

添加pucValue为Json数组Json键值对,获取到的为子Json数组对象。

1
HW_JSON_ARRAY *HW_JsonArrayAddArray(HW_JSON_ARRAY *pstArray)  *HW_JsonArrayAddArray(HW_JSON_ARRAY *pstArray)

获取Json字符串 。

1
HW_CHAR *HW_JsonEncodeStr(HW_JSONOBJ hJson);

删除Json对象 。

1
HW_VOID HW_JsonObjDelete(HW_JSONOBJ *phJson);

Json编码示例:

待解析Json格式:

{
    "temperature":22,
    "otherInfo":{
        "batteryLevel":"low"
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/*变量定义*/ 
HW_JSONOBJ jsonObj; 
HW_JSON rootjson; 
HW_JSON json; 
HW_CHAR *pcJsonStr; 

/*创建Json编码对象*/ 
hJsonObj = HW_JsonObjCreate(); 

/*获取跟节点Json对象*/ 
rootjson = HW_JsonGetJson(hJsonObj); 

/*往根节点中添加键值对*/ 
HW_JsonAddUint(rootjson, "temperature", 22); 

/*从根节点中获取子Json对象*/ 
json = HW_JsonAddJson(rootjson, "otherInfo"); 

/*在子Json中添加键值对*/ 
HW_JsonAddStr(json, " batteryLevel", "low"); 


/*获取Json字符串*/ 
pcJsonStr = HW_JsonEncodeStr(hjsonObj); 

/*删除之前创建的Json编码对象,释放资源*/ 
HW_JsonObjDelete(&hJsonObj);

2. Json解码

使用Json组件进行解码的流程。

创建Json解析对象。

1
HW_JSONOBJ HW_JsonDecodeCreate(HW_CHAR *pucStr, HW_BOOL bStrCpy)

获取Json解析对象中的Json数据部分。

1
HW_JSON HW_JsonGetJson(HW_JSONOBJ hJson)

获取Json数据中与pucKey对应的字符串。

1
HW_CHAR *HW_JsonGetStr(HW_JSON pstJson, HW_CHAR *pucKey)

获取Json数据中与pucKey对应的无符号整型。

1
HW_UINT HW_JsonGetUint(HW_JSON pstJson, HW_CHAR *pucKey, HW_UINT uiDft)

获取Json数据中与pucKey对应的Boolean值。

1
HW_BOOL HW_JsonGetBool(HW_JSON pstJson, HW_CHAR *pucKey, HW_BOOL bDft)

获取Json数据中与pucKey对应的数组。

1
HW_UJSON_ARRAY HW_JsonGetArray(HW_JSON pstJson, HW_CHAR *pucKey)

获取Json数组的长度。

1
HW_UINT HW_JsonArrayGetCount(HW_UJSON_ARRAY pstArray)

获取Json数组中序号为uiIndex项的Json数据。

1
HW_JSON HW_JsonArrayGetJson(HW_UJSON_ARRAY pstArray, HW_UINT uiIndex)

获取Json数组中序号为uiIndex项的无符号整形。

1
HW_UINT HW_JsonArrayGetUint(HW_UJSON_ARRAY pstArray, HW_UINT uiIndex, HW_UINT uiDft)

获取Json数组中序号为uiIndex项的Boolean值。

1
HW_UINT HW_JsonArrayGetBool(HW_UJSON_ARRAY pstArray, HW_UINT uiIndex, HW_BOOL bDft)

获取Json数组中序号为uiIndex项的字符串。

1
HW_CHAR *HW_JsonArrayGetStr(HW_UJSON_ARRAY pstArray, HW_UINT uiIndex)

获取Json数组中序号为uiIndex项的子数组。

1
HW_UJSON_ARRAY HW_JsonArrayGetArray(HW_UJSON_ARRAY pstArray, HW_UINT uiIndex)

删除之前创建的Json解析对象。

1
HW_VOID HW_JsonObjDelete(HW_JSONOBJ *phJson)

Json解析示例:

待解析Json格式:

{
    "action":"notify",
    "type":"userstate",
    "userstateinfo":[
        {
            "num":"11111 ",
            "state":"idle"
        },
        {
            "num":"11111",
            "state":"ringing"
        }
    ]
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/*变量定义*/
HW_JSONOBJ jsonObj;
HW_JSON json;
HW_UJSON_ARRAY jsonArray;
HW_cHAR *action;
HW_cHAR *type;
HW_UiNT count;
HW_UiNT index;
/*创建Json解析对象*/
jsonObj = HW_JsonDecodeCreate(jsonStr, HW_TRUE);
/*获取Json解析对象中的Json数据部分*/
json = HW_JsonGetJson(jsonObj);
/*获取Json数据中与"action"对应的字符串*/
action = HW_JsonGetStr(json, "action");
/*获取Json数据中与"type"对应的字符串*/
type = HW_JsonGetStr(json, "type");
/*获取Json数据中与"userstateinfo"对应的Json数组*/
jsonArray = HW_JsonGetArray(json, "userstateinfo");
/*获取数组jsonArray的长度*/
count = HW_JsonArrayGetCount(jsonArray);
for (index = 0; index < count; index++) 
{
    /*获取数组jsonArray中序号为index项的Json数据*/
    HW_JSON jsonItem = HW_JsonArrayGetJson(jsonArray, index);
    /*获取jsonItem中与" num "对应的字符串*/
    HW_cHAR *num = HW_JsonGetStr(jsonItem, "num");
    /*获取jsonItem中与" state "对应的字符串*/
    HW_cHAR *state = HW_JsonGetStr(jsonItem, "state");
    ......
}
/*删除之前创建的Json解析对象,释放资源*/
HW_JsonObjDelete(jsonObj);