linux C語言Json封裝數據

目的:
java app Tcp客戶端發送數據給Linux C 服務器數據解析

驗證環境:
首先安裝json
安裝包鏈接
鏈接:https://pan.baidu.com/s/1BDc2JldxTEmmcxwdqesvTw
提取碼:54jg

sudo cp tar xvf json-c-0.9.tar.gz /usr/local
cd /usr/local
sudo tar -xvf tar xvf json-c-0.9.tar.gz
cd  xvf json-c-0.9.tar.gz
./configure
make
sudo make install

代碼demo如下:

#include <stdio.h>
#include "/usr/local/include/json/json.h"
/*
實現把點菜的信息以json打包與解析:   
【{"name":"烤土豆",“price”:20},{"name":"小龍蝦","price":300}】
*/

#include <stdio.h>
#include "/usr/local/include/json/json.h"

int main(int argc, char const *argv[])
{
	//1、創建一個json數組對象,就可以理解爲外面那個大容器[]
	struct json_object *arr=json_object_new_array();

	//2、創建兩個字符串對象,可以以理解爲[]中的兩個小容器{}
	struct json_object *str1=json_object_new_object();
	struct json_object *str2=json_object_new_object();

	//3、把要存放的數據轉爲對象
	struct json_object *value1=json_object_new_string("烤土豆");
	struct json_object *value2=json_object_new_int(20);
	struct json_object *value3=json_object_new_string("小龍蝦");
	struct json_object *value4=json_object_new_int(300);

	//4、把數值對象添加到字符串對象中
	json_object_object_add(str1,"name", value1);
	json_object_object_add(str1,"price", value2);
	json_object_object_add(str2,"name", value3);
	json_object_object_add(str2,"price", value4);

	//5、把字符串對象添加到數組對象中
	json_object_array_add(arr,str1);
	json_object_array_add(arr,str2);

	//6、把數組對象轉爲字符流進行發送
	const char *temp=json_object_to_json_string(arr);
	printf("%s\n",temp);



	//1、把得到的字符流轉爲數組對象
	arr=json_tokener_parse(temp);

	//2、獲取數組指定位置的對象
	str1=json_object_array_get_idx(arr,0);
	str2=json_object_array_get_idx(arr,1);

	//3、在字符串{}對象中根據key值找到數值對象
	value1=json_object_object_get(str1,"name");
	value2=json_object_object_get(str1,"price");
	value3=json_object_object_get(str2,"name");
	value4=json_object_object_get(str2,"price");

	//4、數值對象轉換爲對應的數值
	temp=json_object_get_string(value1);
	int n=json_object_get_int(value2);
	printf("%s : %d\n",temp,n);
	temp=json_object_get_string(value3);
	n=json_object_get_int(value4);
	printf("%s : %d\n",temp,n);

	return 0;
}

來個稍微負載的json對象包含json對象發送如下:

	//創建一個json對象,理解爲{},是一個容器
	struct json_object * obj=json_object_new_object();
	struct json_object * member=json_object_new_object();
	//把要存放的數據轉爲對象
	struct json_object *name_value=json_object_new_string(name);
	struct json_object *passwd_value=json_object_new_string(passwd);
	//把數值對象添加到字符串對象中
	json_object_object_add(obj, USR_NAME, name_value);
	json_object_object_add(obj, USR_PASSWD, passwd_value);
	//member
	struct json_object *mem_cmd=json_object_new_string("1");
	struct json_object *mem_data=json_object_new_string("world");
	json_object_object_add(member, "cmd", mem_cmd);
	json_object_object_add(member, "data", mem_data);
	//在json對象obj裏添加“mem”成員member對象
	json_object_object_add(obj, "mem", member);
	//把Json對象轉爲字符流
	const char *temp=json_object_to_json_string(obj);
	printf("len:%d,dat:%s\n",strlen(temp),temp);

打印結果如下:
{ “usr_name”: “LBJ”, “usr_passwd”: “1”, “mem”: { “cmd”: “1”, “data”: “world” } }

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