在前面简单介绍了jsonc相关的函数,下面建创建以及解析json数据。
1 创建
假如我们要创建如下的json数据
{
"GET_WIFI":
{
"WIFI_COUNT" : 3,
"WIFIINFO":[
{
"SSID": "test_wifi01",
"SIGNAL": 99,
"SECURITY": 0
},
{
"SSID": "test_wifi02"
"SIGNAL": 88,
"SECURITY": 1
},
{
"SSID": "test_wifi03"
"SIGNAL": 77
"SECURITY": 2
}
]
}
}
代码如下:
#include <stdio.h>
#include <string.h>
#include "json.h"
typedef struct _SSID_INFO
{
char ssid[32];
int signal;
int security;
}SSID_INFO_S;
int test_jsonc_build()
{
int i = 0;
SSID_INFO_S Info[3] = {
{"test_wifi01",99,0},{"test_wifi02",88,1},{"test_wifi03",77,2}};
const char* jsonData = NULL;
struct json_object *jHeader = json_object_new_object();
struct json_object *jWifi = json_object_new_object();
struct json_object *jWifiList = json_object_new_array();
struct json_object *jWifiListArray[3];
json_object_object_add(jWifi, "WIFI_COUNT", json_object_new_int(3));
for (i = 0; i < 3; i++)
{
jWifiListArray[i] = json_object_new_object();
json_object_object_add(jWifiListArray[i], "SSID", json_object_new_string(Info[i].ssid));
json_object_object_add(jWifiListArray[i], "SIGNAL", json_object_new_int(Info[i].signal));
json_object_object_add(jWifiListArray[i], "SECURITY", json_object_new_int(Info[i].security));
json_object_array_add(jWifiList, jWifiListArray[i]);
}
json_object_object_add(jWifi, "WIFIINFO", jWifiList);
json_object_object_add(jHeader, "GET_WIFI", jWifi);
jsonData = json_object_to_json_string(jHeader);
printf("data is:%s\n", jsonData);
json_object_put(jHeader);
return 0;
}
2 解析
对上面的数据进行解析,代码如下:
#include <stdio.h>
#include <string.h>
#include "json.h"
#define TEST_STRING "{" \
"\"GET_WIFI\":" \
"{" \
"\"WIFI_COUNT\" : 3," \
"\"WIFIINFO\":[" \
"{" \
"\"SSID\": \"test_wifi01\"," \
"\"SIGNAL\": 99," \
"\"SECURITY\": 0" \
"}," \
"{" \
"\"SSID\": \"test_wifi02\"," \
"\"SIGNAL\": 88," \
"\"SECURITY\": 1" \
"}," \
"{" \
"\"SSID\": \"test_wifi03\"," \
"\"SIGNAL\": 77," \
"\"SECURITY\": 2" \
"}" \
"]" \
"}" \
"}"
int test_jsonc_parse()
{
char ssid[64];
int signal = 0;
int security = 0;
int cnt = 0, i = 0;
struct json_object *jWifi = NULL;
struct json_object *jVal = NULL;
struct json_object *jWifiList = NULL;
struct json_object *jWifiListArray = NULL;
struct json_object *jHeader = json_tokener_parse(TEST_STRING);
if (NULL == jHeader)
return -1;
if (!json_object_object_get_ex(jHeader, "GET_WIFI", &jWifi))
goto error;
if (!json_object_object_get_ex(jWifi, "WIFI_COUNT", &jVal))
goto error;
cnt = json_object_get_int(jVal);
if (!json_object_object_get_ex(jWifi, "WIFIINFO", &jWifiList))
goto error;
for (i = 0; i < cnt; i++)
{
jWifiListArray = json_object_array_get_idx(jWifiList, i);
if (!json_object_object_get_ex(jWifiListArray, "SSID", &jVal))
goto error;
strcpy(ssid, json_object_get_string(jVal));
if (!json_object_object_get_ex(jWifiListArray, "SIGNAL", &jVal))
goto error;
signal = json_object_get_int(jVal);
if (!json_object_object_get_ex(jWifiListArray, "SECURITY", &jVal))
goto error;
security = json_object_get_int(jVal);
printf("total wifi num:%d, current num:%d, wifi ssid:%s, wifi signal:%d, wifi security:%d\n",
cnt, i + 1, ssid, signal, security);
}
json_object_put(jHeader);
return 0;
error:
printf("error!\n");
json_object_put(jHeader);
return -1;
}
输出结果如下:
total wifi num:3, current num:1, wifi ssid:test_wifi01, wifi signal:99, wifi security:0
total wifi num:3, current num:2, wifi ssid:test_wifi02, wifi signal:88, wifi security:1
total wifi num:3, current num:3, wifi ssid:test_wifi03, wifi signal:77, wifi security:2