json-c使用_創建及分析json

文章目錄


在前面簡單介紹了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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章