目的:
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” } }