这里主要介绍的是怎样通过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. Android 计时与倒计时

    方法一 Timer与TimerTask(Java实现) [java]  view plain copy print ?   public class timerTask extends Activit ...

  2. 《C陷阱与缺陷》整理二

    1.数组名作实參     在C语言中,我们没有办法将一个数组作为函数參数传递,假设我们使用数组名作为參数.这个时候数组名立马会被转换为指向该数组的第一个元素的指针.     关于这一点的理解能够向前深 ...

  3. windows下建立文件的换行符^M导致linux下的shell脚本执行错误的解决方式

    常常在windows下编辑的文件远程传送到linux下的时候每行末尾都会出现^M.这将导致shell脚本执行错误,主要是由于dos下的编辑器和linux下的编辑器对文件末行的回车符处理不一致导致. 主 ...

  4. Debian/Ubuntu Linux 下安装LLVM/Clang 编译器

    第一步,首先编辑 /etc/apt/sources.list,增加下面源: (加入源后务必执行apt-get update,假设有错误提示,先执行第二步,然后apt-get update) Debia ...

  5. linux命令:echo

    echo $SHELL ----> /usr/bin/tcsh echo $ARBORDIR ----> /export/home/arbsfr/SFR_ENTREPRISE/SFRE3

  6. UC网盘被关停 将与阿里淘盘合并?(案例说明云盘的成本才是重点,技术不是问题;与巨头竞争是重点)

    UC网盘被关停 将与阿里淘盘合并? 二八2016-03-18 08:05:36阿里巴巴 网盘 产品阅读(0)评论(12) UC网盘项目组日前发布公告称将停止网盘存储服务,原因为配合国家对云盘传播淫秽色 ...

  7. 点击得到QTableWidget中任意位置QPushButton的行列信息

    http://www.qtcn.org/bbs/read-htm-tid-51835.html http://www.qtcn.org/bbs/simple/?t43841.html 比如(点击每行最 ...

  8. C#中System.Globalization.DateTimeFormatInfo.InvariantInfo怎么用

    原文  C#中System.Globalization.DateTimeFormatInfo.InvariantInfo怎么用 在开发的时候,碰到下面这样一个问题: 在程序中显示当前系统时间,但是有一 ...

  9. 一些Windows API导致的Crash以及使用问题总结

    RegQueryValueEx gethostbyname/getaddrinfo _localtime64 FindFirstFile/FindNextFile VerQueryValue Crea ...

  10. SRM 583 Div Level Two:IDNumberVerification

    题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=12610 这道题比较有意思,估计是中国人出的吧,以前都不知道身份 ...