JSON(JavaScript Object Notation)是一種輕量級(jí)的數(shù)據(jù)交換格式。C語言可以通過第三方庫(如jansson)來解析和生成JSON字符串。在使用中,我們需要將JSON數(shù)據(jù)通過網(wǎng)絡(luò)發(fā)送到其他設(shè)備上,同時(shí)也需要從其他設(shè)備上接收J(rèn)SON數(shù)據(jù)。本文將介紹在C語言中如何發(fā)送和接收J(rèn)SON數(shù)據(jù)。
在發(fā)送JSON數(shù)據(jù)之前,我們需要將JSON對(duì)象轉(zhuǎn)換成字符串,可以使用jansson庫提供的函數(shù)來完成。例如下面的代碼將創(chuàng)建一個(gè)JSON對(duì)象,并將其轉(zhuǎn)換為字符串。
json_t *json_obj = json_object(); json_object_set_new(json_obj, "name", json_string("Tom")); json_object_set_new(json_obj, "age", json_integer(20)); const char *json_str = json_dumps(json_obj, JSON_COMPACT);
在將JSON字符串發(fā)送到其他設(shè)備時(shí),可以使用套接字(socket)來發(fā)送數(shù)據(jù)。以下代碼使用套接字發(fā)送JSON字符串。
int sockfd = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr("127.0.0.1"); server_addr.sin_port = htons(8888); connect(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)); send(sockfd, json_str, strlen(json_str), 0); close(sockfd);
接收J(rèn)SON數(shù)據(jù)需要先接收數(shù)據(jù),并將接收到的數(shù)據(jù)轉(zhuǎn)換成JSON對(duì)象。以下代碼使用套接字接收J(rèn)SON字符串,并將其轉(zhuǎn)換成JSON對(duì)象。
int sockfd = socket(AF_INET, SOCK_STREAM, 0); struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(8888); bind(sockfd, (struct sockaddr *)&server_addr, sizeof(server_addr)); listen(sockfd, 128); int connfd = accept(sockfd, (struct sockaddr *)NULL, NULL); char buff[1024] = {0}; recv(connfd, buff, 1024, 0); close(sockfd); json_error_t error; json_t *json_obj = json_loads(buff, 0, &error);
以上是在C語言中發(fā)送和接收J(rèn)SON數(shù)據(jù)的基本方法,開發(fā)者可以在實(shí)際的項(xiàng)目中根據(jù)需要進(jìn)行修改和擴(kuò)展。