通过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语句,布布扣,bubuko.com

时间: 2024-08-24 10:38:50

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

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

原文引自:  作者: 缺水的海豚  来源: 博客园  发布时间: 2010-09-21 21:47  阅读: 6136 次  推荐: 0   原文链接   [收藏] 摘要:ExtJs用到的数据内容基本上都是JSON格式的,要和ASP.NET结合开发,需要格式化数据成JSON的东西.所以作者实现了一个生成JSON字符串的方法. 最近在学习ExtJs与ASP.NET结合开发,前者用到的数据内容基本上都是JSON格式,遂想写一个格式化数据成JSON的东东,在网上找了一下,发现还蛮多的,实现了一个类似于

通过YAJL获取json中的值

这里主要是举例说明一下如果通过yajl获取json中的值. 对于array和object来说,获取的方式略有不同,具体可以参考下面的代码. 我只是从网上搜集信息,知道有这么一种方法,如果还有别的方法,请各位高手指点一下 首先,先贴出需要解析的json语句 [ "source", "abc", {"key1":"value1"} ] 然后就是关键所在了,这段代码主要是针对上面的json语句来写的,并非对所有json语句都适用.

利用反射生成SQL语句

// 修改学员信息的方法 public bool ModifyStudent(MODEL.Students model) { // 利用反映获取类对所有属性,用来动态生成SQL语句 StringBuilder sbSql = new StringBuilder("update Students set "); // 先获得model 的Type类型 Type modeType = model.GetType(); // 通过Type类型得到它所有的公开属性 PropertyInfo[]

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

文章继续 桦仔兄的文章 将表里的数据批量生成INSERT语句的存储过程 增强版 继续增强... 本来打算将该内容回复于桦仔兄的文章的下面的,但是不知为何博客园就是不让提交!.... 所以在这里贴出来吧,算作继续增加文章中解决的:根据查询条件自动生成插入脚本的需求,其实这种需求还是蛮常见的. 本文着重解决了文中的脚本的schema问题,给调整了下,现在脚本能自动识别出不同的schema下同名的表的语句 修改后脚本如下: -- Author: <桦仔> -- Blog: <http://ww

json 生成 json字符串

生成json格式的字符串. 需要相关包 1 package cn.itcast.controller; 2 3 import static org.junit.Assert.*; 4 5 import java.util.ArrayList; 6 import java.util.List; 7 8 import net.sf.json.JSONArray; 9 import net.sf.json.JSONObject; 10 import net.sf.json.JsonConfig; 11

NO2:自动生成sql语句

SQL语句自动生成工具 大哉乾元 2016/2/26   作者原创转载请注明出处 前言 这个程序是几年前做成的,现在整理成文档和大家分享,当时参与的项目中大量使用的sql语句,所以SqL语句的代码输入占了较大的比例,为了提高sql语句的书写正确性和输入效率,做成了这个自动生成工具. 一:ADO.NET中执行sql文,对应的sql语句嵌入到vb.net的代码内,分析sql的语法格式个特点: 已检索语句为例分析: A:必须是已select开头 B:检索的字段名(一些系统函数:可选,例如max,sum

生成JSON字符串

json是由键值对组成,现在一般的从服务器传到客户端的数据都是通过json,比xml更轻量级. 首先我们要通过一个方法来生成一个json字符串. package com.json.tools; import net.sf.json.JSONObject; //生成json字符串 public class JsonTools { public static String CreateJaso(String key,Object value){ JSONObject jsonObject = new

Java-封装生成JSON数据和XML数据类

1.背景 借鉴与php中 app接口的实现(php写app接口生成xml和json数据),封装了java版的json和xml数据操作类! 2.准备 在使用之前,需要引入 json 的jar 包:点我下载 ! 这里实现了,对象转json , 对象集合转json, 对象转xml,对象集合转xml ; 3.appUtil 工具类实现 具体的实现过程,我就不解释了,一边写,一边测试!直到写成为止! 里面的 tojsonArray() 方法 没有使用,可以删除,不过想生成json数组的 ,就不需要删除了!

模拟Hibernate动态生成SQL语句

这里有一个xml配置文件,也就是Hibernate框架中会用到的POJO和数据库的映射文件 1 <?xml version="1.0" encoding="utf-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://www.hibernate.org/dtd/hibernate-