使用C语言调用服务器端ON数据的方法 (c json 调用服务器端)

随着互联网的快速发展,越来越多的应用程序需要与服务器交互获取数据。而ON(JavaScript Object Notation)作为一种轻量级的数据交换格式,已经成为了服务器端和客户端之间的数据传输标准。然而,在使用C语言开发的应用程序中,如何调用服务器端的ON数据却是一大难题。本文将介绍。

一、使用第三方库

在C语言中,没有内置的ON解析库,因此我们需要借助第三方库来解析ON数据。一些流行的第三方ON解析库有:jansson、cON、ON-C等。其中,cON是一种轻量级、快速、可移植的ON解析器,可以方便地嵌入到C语言应用程序中。下面是使用cON库获取服务器端ON数据的代码示例:

“`c

#include

#include

#include

#include “cON.h”

#define BUFFER_SIZE (256 * 1024) /* 256 KB */

struct buffer_struct {

char *memory;

size_t size;

};

static size_t write_callback(void *contents, size_t size, size_t nmemb, void *userp)

{

size_t realsize = size * nmemb;

struct buffer_struct *mem = (struct buffer_struct *)userp;

char *ptr = realloc(mem->memory, mem->size + realsize + 1);

if(ptr == NULL) {

/* out of memory! */

fprintf(stderr, “realloc() fled\n”);

return 0;

}

mem->memory = ptr;

memcpy(&(mem->memory[mem->size]), contents, realsize);

mem->size += realsize;

mem->memory[mem->size] = 0;

return realsize;

}

int mn(void)

{

CURL *curl;

CURLcode res;

struct buffer_struct buffer = {0};

char errors[256];

cON *root = NULL;

curl = curl_easy_init();

if(curl) {

curl_easy_setopt(curl, CURLOPT_URL, “http://example.com/jsondata”);

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);

curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&buffer);

res = curl_easy_perform(curl);

if(res != CURLE_OK) {

fprintf(stderr, “curl_easy_perform fled: %s\n”, curl_easy_strerror(res));

goto cleanup;

}

root = cON_Parse(buffer.memory);

if(!root) {

sprintf(errors, “json parse error before: [%s]\n”, cON_GetErrorPtr());

fprintf(stderr, “Error: %s\n”, errors);

goto cleanup;

}

printf(“%s\n”, cON_Print(root));

cleanup:

cON_Delete(root);

free(buffer.memory);

curl_easy_cleanup(curl);

}

return 0;

}

“`

在上述代码中,我们使用了curl库来获取服务器端的ON数据,并将其保存到一个指定大小的缓冲区中。然后,我们使用cON库解析这个ON数据并打印出来。需要注意的是,对于获取和解析ON数据的错误处理,我们需要使用cURL和cON库提供的相应接口进行处理。此处,我们简单地通过输出错误信息来处理错误。

二、手动解析方法

如果我们不想使用第三方解析库,也可以手动解析服务器端ON数据。虽然这种方法相对于使用现成的解析库需要更多的代码和时间,但是它也具有更高的可控性,可以更好地满足特定应用程序的需求。下面是手动解析ON数据的代码示例:

“`c

#include

#include

#include

#include

#define BUFFER_SIZE (256 * 1024) /* 256 KB */

struct buffer_struct {

char *memory;

size_t size;

};

static size_t write_callback(void *contents, size_t size, size_t nmemb, void *userp)

{

size_t realsize = size * nmemb;

struct buffer_struct *mem = (struct buffer_struct *)userp;

char *ptr = realloc(mem->memory, mem->size + realsize + 1);

if(ptr == NULL) {

/* out of memory! */

fprintf(stderr, “realloc() fled\n”);

return 0;

}

mem->memory = ptr;

memcpy(&(mem->memory[mem->size]), contents, realsize);

mem->size += realsize;

mem->memory[mem->size] = 0;

return realsize;

}

char* get_value_by_key(char* json_str, char* key)

{

int i, j;

char *result = NULL;

/* Find key */

for (i=0; i

if (json_str[i] == ‘\”‘ && strncmp(json_str+i+1, key, strlen(key)) == 0

&& json_str[i+1+strlen(key)] == ‘\”‘ && json_str[i+1+strlen(key)+1] == ‘:’)

{

/* Find key’s value */

for (j=i+1+strlen(key)+2; j

if (json_str[j] == ‘\”‘) {

result = (char*)malloc((j-i-strlen(key)-3) + 1);

strncpy(result, json_str+i+1+strlen(key)+2, j-i-strlen(key)-3);

result[j-i-strlen(key)-3] = ‘\0’;

break;

}

}

break;

}

}

return result;

}

int mn(void)

{

CURL *curl;

CURLcode res;

struct buffer_struct buffer = {0};

char errors[256];

char *json_str = NULL;

char *value = NULL;

curl = curl_easy_init();

if(curl) {

curl_easy_setopt(curl, CURLOPT_URL, “http://example.com/jsondata”);

curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);

curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&buffer);

res = curl_easy_perform(curl);

if(res != CURLE_OK) {

fprintf(stderr, “curl_easy_perform fled: %s\n”, curl_easy_strerror(res));

goto cleanup;

}

/* Copy buffer to string */

json_str = (char*)malloc(buffer.size + 1);

strncpy(json_str, buffer.memory, buffer.size);

json_str[buffer.size] = ‘\0’;

/* Parse and get value by key */

value = get_value_by_key(json_str, “name”);

printf(“%s\n”, value);

cleanup:

free(json_str);

free(buffer.memory);

curl_easy_cleanup(curl);

}

return 0;

}

“`

在上述代码中,我们同样使用了curl库来获取服务器端的ON数据,但是进行了手动解析。我们定义了一个get_value_by_key函数,用于获取ON字符串中指定key的value值。在这个函数中,我们使用两个循环来分别查找指定key和这个key所对应的value值,并将其保存到一个新的字符串中返回。需要注意的是,对于获取和解析ON数据的错误处理同样需要特别注意。

结论

相关问题拓展阅读:

cjson获取属性值后需要释放吗

需要。符串生成cjson指针的函数,使用后需要调用cON进行释放。cjson就是用来处理json格式数据的一个库。cjson是使用c语言猜颤塌编写的,它十分轻量级穗圆,可用在内存有限的嵌入式设备中,来处理与互联网的交互数据。洞饥

json是什么

ON(JavaScript Object Notation, 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编裂袜程语言的文本格式来存储和表示数据。

简洁和清晰的层次结构使得 ON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。简单来说:json就是一种在各个编程语言中肆晌激流通的数据格式,负责不同编程语言中的数据传递和交互。

扩展资料

注意事项:

1,json的键值对的键部分,必须用双引号”包裹,单引谨孝号都不行(所以如果在键中出现了关键字,也被字符化了),而js中对象没有强制要求(所以在键中不允许出现关键字)。

2,json的键值对的值部分,不允许出现函数function,undefined,NaN,但是可以有null,js中对象的值中可以出现。

3,json数据结束后,不允许出现没有意义的逗号,如:{“name”:”admin”,”age”:18,},注意看数据结尾部分18的后面的逗号,不允许出现。

参考资料来源:

百度百科-Json

ON(即json)简介:

  ON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 ON采用完全独立于语言的文本格式,但是也使用了棚返纤类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使ON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。

ON语法规则:

ON 语法是 JavaScript 对象表示语法的子集。

数据在名称/值对中

数据由逗号分隔

花括号保存对象

方括号保存数组

ON基础结构:

ON结构有两种结构:

json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构。

对象:对象在js中表示为“{}”括起来的内容,数据结构为 {key:value,key:value,…}的键值对的结构,在面向对象的语言中,key为世卖对象的属性,value为对应的属性值,所以很容易理解,取值方法为 对象.key 获取属性值,这个属性值的类型可以是 数字、字符串、数组、对象几种。

数组:链仿数组在js中是中括号“”括起来的内容,数据结构为 ,取值方式和所有语言中一样,使用索引获取,字段值的类型可以是 数字、字符串、数组、对象几种。

经过对象、数组2种结构就可以组合成复杂的数据结构了。

使用XML作为传输格式的优势:1. 格式统一, 符合标准2. 容易与其他系统进行远程交互, 数据共享比较方便缺点:1. XML文件格式文件庞谨答大, 格式复杂, 传输占用带宽2. 服务器端和客户端都需要花费大量代码来解析XML, 不论服务器端和客户端代码变的异常复杂和不容易维护3. 客户端不同浏览器之间解析XML的方式不一致, 需要重复编写很多代码4. 服务器端和客户端解析XML花费资源和时间那么除了XML格式, 还有没有其他格式, 有一种叫做碰者ON (JavaScript Object Notation) 的轻量级数据交换格式能够替代XML的工作.优点:1. 数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小2. 易于解析这种语言, 客户端JavaScript可以简单的通过eval()进行ON数据的读取3. 支持多种语言, 包括ActionScript, C, C#, ColdFusion, Java, JavaScript, Perl, PHP, Python, Ruby等语言服务器端语言, 便于服务器端的解析4. 在PHP世界, 已经有PHP-ON和ON-PHP出现了, 便于PHP序列化后的程序直接调用. PHP服务器端的对象、数组等能够直接生ON格式, 便于客户端的访问提取. 另外PHP的PEAR类已经提出了支持 (

)5. 因为ON格式能够直接为服务器端代码使用, 大祥吵慧大简化了服务器端和客户端的代码开发量, 但是完成的任务不变, 且易于维护缺点:1. 没有XML格式这么推广的深入人心和使用广泛, 没有XML那么通用性2. ON格式目前在Web Service中推广还属于初级阶段PS: 据说Google的Ajax是使用 ON+模板 做的啊

MySQL 从 5.7 开始,增加了新的数据类型扰并:ON。

ON 类型的出现,弥补了 MySQL 长期以来相比其他关系型数据库旅李族的非标准化特性略势,比如可以用 ON 来实现类似字典、数组等类型。以及之后大量针对 ON 类型字串的相关遍历方法与函数。

比如对数组来说拆弊,简单的遍历路径为 “$” 或者 “$” 来一次性遍历所有元素。MySQL 8.0 又新增了对于数组元素的范围遍历,比如 “$”,表示遍历下标为 m 到 n 的元素。

关于c json 调用服务器端的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。


数据运维技术 » 使用C语言调用服务器端ON数据的方法 (c json 调用服务器端)