通过YAJL生成json语句
这里主要介绍的是怎样通过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语句的更多相关文章
- ASP.NET用SQL Server中的数据来生成JSON字符串
原文引自: 作者: 缺水的海豚 来源: 博客园 发布时间: 2010-09-21 21:47 阅读: 6136 次 推荐: 0 原文链接 [收藏] 摘要:ExtJs用到的数据内容基本 ...
- 通过YAJL获取json中的值
这里主要是举例说明一下假设通过yajl获取json中的值. 对于array和object来说,获取的方式略有不同,详细能够參考以下的代码. 我仅仅是从网上搜集信息.知道有这么一种方法.假设还有别的方法 ...
- python 全栈开发,Day94(Promise,箭头函数,Django REST framework,生成json数据三种方式,serializers,Postman使用,外部python脚本调用django)
昨日内容回顾 1. 内容回顾 1. VueX VueX分三部分 1. state 2. mutations 3. actions 存放数据 修改数据的唯一方式 异步操作 修改state中数据的步骤: ...
- servlet生成json数据返回至Ajax
一.JSON JSON是一种取代XML的数据结构,和xml相比,它更小巧但描述能力却不差,由于它的小巧所以网络传输数据将减少更多流量从而加快速度. JSON就是一串字符串 只不过元素会使用特定的符号标 ...
- asp.net用sql数据库生成json字符串并显示出来
use Shop ,) )) insert into DictBase select '包装' UNION ALL select '价格' UNION ALL select '品牌' 工厂方法模式 I ...
- 初识TypeScript:查找指定路径下的文件按类型生成json
如果开发过node.js的话应该对js(javascript)非常熟悉,TypeScript(以下简称ts)是js的超集. 下面是ts的官网: https://www.tslang.cn/ 1.环境配 ...
- 将表里的数据批量生成INSERT语句的存储过程 增强版
将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...
- Hibernate实体生成JSON的问题及解决
1.延迟加载所造成的代理对象无法正常序列化的问题 在实体类上添加注解: @JsonIgnoreProperties({ "hibernateLazyInitializer", &q ...
- php生成json或者xml数据
, ,'数据返回成功',$arr);echo $xml;?>
随机推荐
- uva10791
#include <iostream> using namespace std; int main(int argc, char *argv[]) { int j,k,m=0,flag; ...
- Python的字符串格式化符号
1.字符串格式化符号含义 %c:格式化字符及其ASCII码 %s:格式化字符串 %d:格式化整数 %o:格式化无符号八进制数 %x:格式化无符号十六进制数 %X:格式化无符号十六进制数(大写) %f: ...
- FastReport的WCF托管到Windows服务的配置文件
官网上找到的,还没有来得及研究,有时间了再研究. <?xml version="1.0"?> <configuration> <appSettings ...
- 九度OnlineJudge之1014:排名
题目描述: 今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完成的题数排序,没有考虑每题的分值,所以并不是最后的排名.给定录取分数线,请你写程序找出最后通过分数线的考生,并将他 ...
- Android SDK 环境变量配置(Windows)
Android 开发需要进行adb的配置, 这里使用的是 adt-bundle-windows-x86_64-20140321, 里面捆绑的有 eclipse ,不需要再进行 其他的配置,直接下载解压 ...
- meta viewport标签的使用说明(手机浏览缩放控制)
网页中有这么一句时,在iPhone的浏览器中将以原始大小显示,并不允许缩放. <meta name="viewport" content="width=device ...
- openfire学习4------->android客户端聊天开发之聊天功能开发
前面我们已经把服务器搭建完成,并且在客户端实现了登录了. 和我们使用的QQ一样,想一想,登录成功之后呢?肯定是要有一个好友列表,通过这个列表,我们可以选择我们需要聊天的好友. 这里我们先研究下 xmp ...
- 《Windows核心编程》第一讲 对程序错误的处理
一个Windows函数通常都有一个有意义的返回值类型,它标志着这个函数的运行状态,即函数运行成功与否.windows常用的函数类型如下图: 从系统内部来讲,当一个Windows函数检测到一个错误时,它 ...
- session对象和applicatione对象
ASP.NET 的常用对象有:response对象.request对象.application对象.server对象.session对象.下面主要讨论session对象和cookie对象. sessi ...
- HTML——使用表格对表单进行布局
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3Vuc2h1bWlu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...