这里主要介绍的是怎样通过yajl生成一个json语句。方法通过代码就能够非常清楚的看到了,只是这里仅仅加入了字符串。

假设须要加入其它类型的,能够查考yajl的手冊,调用其它函数进行加入。

/*
* 这个文件主要展示怎样通过yajl生成json语句。
* 这里不包括解析的部分,仅仅包括了最简单的构造部分。
*/ #include <yajl/yajl_gen.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h> //#define USE_MAP 1
#define BEAUTIFY_OUTPUT 1 typedef struct yajl_info_t
{
int depth;
yajl_gen gen; //保存一个generator
} yajl_info; /*
* begin_map和end_map会生成一个对象
* 在它们直接插入数据的话,会变成对象中的键/值对
*/
yajl_gen_status begin_map(void *ctx)
{
yajl_info *info = (yajl_info *)ctx;
yajl_gen_status __stat = yajl_gen_map_open(info->gen);
if (__stat == yajl_gen_status_ok) {
info->depth++ ;
} else {
printf("yajl_gen_map_open failed\n");
}
return __stat;
} /*
* begin_map和end_map会生成一个数组
* 在它们直接插入数据的话,会变成数组中的内存
*/
yajl_gen_status begin_array(void *ctx)
{
yajl_info *info = (yajl_info *)ctx;
yajl_gen_status __stat = yajl_gen_array_open(info->gen);
if (__stat == yajl_gen_status_ok) {
info->depth++;
} else {
printf("yajl_gen_array_open failed\n");
}
return __stat;
} yajl_gen_status end_array(void *ctx)
{
yajl_info *info = (yajl_info *)ctx;
yajl_gen_status __stat = yajl_gen_array_close(info->gen);
if (__stat == yajl_gen_status_ok) {
info->depth--;
}
return __stat;
} int yajl_init(yajl_info *info) {
info->depth = 0;
info->gen = yajl_gen_alloc(NULL);
#ifdef BEAUTIFY_OUTPUT
//设置输出格式
yajl_gen_config(info->gen, yajl_gen_beautify, 1);
#endif
} int yajl_free(yajl_info *info) {
info->depth = 0;
yajl_gen_free(info->gen);
} int main(int argc, char **argv)
{
yajl_info yajlinfo;
yajl_init (&yajlinfo);
const unsigned char* buf;
size_t buflen;
int i; #ifdef USE_MAP
//创建一个对象
begin_map(&yajlinfo);
#else
//创建一个数组
begin_array(&yajlinfo);
#endif //往对象/数组中插入数据
unsigned char *key = "scutech";
unsigned char *value = "dingjia";
int keylen = strlen(key);
int valuelen = strlen(value);
yajl_gen_string(yajlinfo.gen, (const unsigned char*)key, keylen);
yajl_gen_string(yajlinfo.gen, (const unsigned char*)value, valuelen); for(i=1;i<5;i++) {
unsigned char key1[50];
unsigned char value1[50];
sprintf(key1, "scutech%d", i);
sprintf(value1, "dingjia%d", i);
int keylen1 = strlen(key1);
int valuelen1 = strlen(value1);
//往对象中插入数据
begin_map(&yajlinfo);
yajl_gen_string(yajlinfo.gen, (const unsigned char*)key1, keylen1);
yajl_gen_string(yajlinfo.gen, (const unsigned char*)value1, valuelen1);
end_map(&yajlinfo);
} #ifdef USE_MAP
end_map(&yajlinfo);
#else
end_array(&yajlinfo);
#endif
//这里是获取已经生成好的json语句,保存在buf中,长度保存在buflen中
yajl_gen_get_buf(yajlinfo.gen, &buf, &buflen);
printf("%s\n", buf);
yajl_free(&yajlinfo);
return 0;

通过YAJL生成json语句的更多相关文章

  1. ASP.NET用SQL Server中的数据来生成JSON字符串

    原文引自:  作者: 缺水的海豚  来源: 博客园  发布时间: 2010-09-21 21:47  阅读: 6136 次  推荐: 0   原文链接   [收藏] 摘要:ExtJs用到的数据内容基本 ...

  2. 通过YAJL获取json中的值

    这里主要是举例说明一下假设通过yajl获取json中的值. 对于array和object来说,获取的方式略有不同,详细能够參考以下的代码. 我仅仅是从网上搜集信息.知道有这么一种方法.假设还有别的方法 ...

  3. python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)

    昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...

  4. servlet生成json数据返回至Ajax

    一.JSON JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON就是一串字符串 只不过元素会使用特定的符号标 ...

  5. asp.net用sql数据库生成json字符串并显示出来

    use Shop ,) )) insert into DictBase select '包装' UNION ALL select '价格' UNION ALL select '品牌' 工厂方法模式 I ...

  6. 初识TypeScript:查找指定路径下的文件按类型生成json

    如果开发过node.js的话应该对js(javascript)非常熟悉,TypeScript(以下简称ts)是js的超集. 下面是ts的官网: https://www.tslang.cn/ 1.环境配 ...

  7. 将表里的数据批量生成INSERT语句的存储过程 增强版

    将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...

  8. Hibernate实体生成JSON的问题及解决

    1.延迟加载所造成的代理对象无法正常序列化的问题 在实体类上添加注解: @JsonIgnoreProperties({ "hibernateLazyInitializer", &q ...

  9. php生成json或者xml数据

    , ,'数据返回成功',$arr);echo $xml;?>

随机推荐

  1. jquery 下拉多选插件

    Jquery多选下拉列表插件jquery multiselect功能介绍及使用 Chosen 替代样式表 Bootstrap Chosen

  2. VHDL TestBench 测试终止时自动结束仿真——assert方法

    可在结束仿真位置添加如下代码: assert false report "Simulation is finished!" severity Failure; 则在Modelsim ...

  3. UVA 10494-If We Were a Child Again(一流的塔尔苏斯)

    Problem C If We Were a Child Again Input: standard input Output: standard output  seconds   "Oo ...

  4. 使用 Nginx 创建服务器的负载均衡

    译序         Nginx 的负载均衡配置看上去很简单.以下是 Nginx 官方给的一个简单的负载均衡的例子: http {   upstream myproject {     server ...

  5. Swift - 类型嵌套(以扑克牌结构体为例)

    类型嵌套,简单来说实在一个类型中包含另外一个类型.我们拿一副扑克来说明. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 //类 ...

  6. Swift - 使用NSURL进行数据的提交和获取(POST与GET)

    使用Swift进行iOS开发时,不可避免的要进行远程的数据获取和提交. 其数据请求的方式既可能是POST也可能是GET.同不管是POST还是GET又可以分为同步请求和异步请求. 下面通过四个例子来进行 ...

  7. Hadoop 的常用组件一览

    Hadoop 集群安装及原理:hdfs命令行操作:Java操作hdfs的常用API接口:动态添加删除数据节点. HBase 集群安装及原理:Hbase命令行操作:Java操作Hbase的常用API接口 ...

  8. hadoop 磁盘限额配置

    配置方法: 在 hdfs-site.xml 里配置如下参数,注意,那个 value 的值是配置该磁盘保留的DFS不能使用的空间大小,单位是字节. (如果多块硬盘,则表示为每块硬盘保留这么多空间) &l ...

  9. [计算机基础]关于实体( Entity )和模型( Model )

    实体与模型的浅析 在日常开发过程中经常看到Entity,Model,DataModel,它们之间到底有什么异同?下面是我个人的一些理解. 一.Entity,Model,它们是什么? 维基百科描述: 实 ...

  10. 14.4.3.6 Fine-tuning InnoDB Buffer Pool Flushing 微调 InnoDB Buffer Pool 刷新:

    14.4.3.6 Fine-tuning InnoDB Buffer Pool Flushing 微调 InnoDB Buffer Pool 刷新: innodb_flush_neighbors an ...