通过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;?>
随机推荐
- Javascript 正确用法 二
好的,废话不多说,接着上篇来. 变量(variables) 始终使用 var keyword来定义变量,假设不这样将会导致 变量全局化,造成污染. //bad superPower = new Sup ...
- EasyUI - DataGrid 组建 - [ 删除,修改 ]
效果: html代码: <div style="padding-top: 50px; width: 800px; margin: 0 auto;"> <!--使用 ...
- cocos2d-x游戏开发系列教程-坦克大战游戏加载地图的编写
上节课写了关卡选择场景,那么接下来写关卡内容,先写最基本的地图的加载 我们新建一个场景类,如下所示: class CityScene : public cocos2d::CCLayer { publi ...
- 九度OnlineJudge之1018:统计同成绩学生人数
题目描述: 读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入: 测试输入包含若干测试用例,每个测试用例的格式为 第1行:N 第2行:N名学生的 ...
- 节点地址的函数list_entry()原理详解
本节中,我们继续讲解,在linux2.4内核下,如果通过一些列函数从路径名找到目标节点. 3.3.1)接下来查看chached_lookup()的代码(namei.c) [path_walk()> ...
- android中保存Bitmap图片到指定文件夹中的方法
/** 保存方法 */ public void saveBitmap() { Log.e(TAG, "保存图片"); File f = new File("/s ...
- ASP.NET - 在类中如何使用 Server.MapPath
直接在类中使用 Server.MapPath 会出现错误,这是由于类中不能直接使用 System.Web.UI.Page 的非静态函数造成的.解决方法有两种: 方法一.为类增加继承 class CFo ...
- Codeforces Round #214 (Div. 2) C. Dima and Salad (背包变形)
C. Dima and Salad time limit per test 1 second memory limit per test 256 megabytes input standard in ...
- 利用ArrayList对Hashtable其进行排序
前言: 最近在使用Hashtable的时候发现一个问题:就是当你对Hashtable进行遍历的时候整个输出结果是毫无顺序的, 上网查了一下说是Hashtable有自己内部的排序机制,如果要自定义排序的 ...
- javascript json格式解析方法
json.parse用于从一个字符串中解析出json对象 stringify()用于从一个对象解析出字符串 var dataObj = eval("("+json+")& ...