色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

c 中如何傳遞json數據

李中冰2年前9瀏覽0評論

在C語言中,傳輸JSON數據就需要用到JSON解析庫。在這里我們選擇使用開源的Jansson庫,它可以很方便地序列化和反序列化JSON數據。

首先,需要將要發送的JSON數據序列化轉換為字符串,可以使用Jansson提供的json_dumps()方法:

json_t *root = json_object();
json_object_set_new(root, "name", json_string("Alice"));
json_object_set_new(root, "age", json_integer(20));
const char *json_str = json_dumps(root, JSON_COMPACT | JSON_ENSURE_ASCII);
json_decref(root);

然后,我們就可以將該字符串通過網絡傳輸,例如使用Socket:

int sockfd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in servaddr = {0};
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(8000);
inet_pton(AF_INET, "127.0.0.1", &servaddr.sin_addr);
connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr));
send(sockfd, json_str, strlen(json_str), 0);
close(sockfd);

接收方收到數據后,需要將JSON字符串解析成JSON對象,可以使用Jansson提供的json_loads()方法:

char recv_buff[1024];
recv(sockfd, recv_buff, sizeof(recv_buff), 0);
json_error_t error;
json_t *root_recv = json_loads(recv_buff, 0, &error);
if (!root_recv) {
fprintf(stderr, "json error on line %d: %s\n", error.line, error.text);
return -1;
}
printf("name: %s\nage: %d\n", json_string_value(json_object_get(root_recv, "name")), 
json_integer_value(json_object_get(root_recv, "age")));
json_decref(root_recv);

其中,json_loads()方法返回的是json_t類型的JSON對象。需要注意的是,json_t類型是有引用計數的,所以在使用過后需要將其清除,使用json_decref()方法即可。