在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()方法即可。
上一篇es6 json字節
下一篇python 自動買股票