1.安装jansson

  ./configure
make
make install

2.生成帮助文档

cd doc
make html

编译安装doc时提示 spinx-build not a command

执行下面语句安装sphinx

easy_install -U Sphinx

生成_build文件夹

cd _build/html/

使用火狐浏览器启动帮助文档

 Firefox index.html

3.编程

包含头文件: #include <jansson.h>

编译连接时加库 -ljansson

           gcc –o source source.c –ljansson

如果执行程序出现:error while loading shared libraries: libjansson.so.4: cannot open shared object file: No such file or directory

          找不到libjansson.so.4这个库时用下面方法解决

       //查找libjansson.so.4所在位置

          Whereis libjansson

显示:libjansson: /usr/local/lib/libjansson.a /usr/local/lib/libjansson.la /usr/local/lib/libjansson.so

自己的libjansson.so所在位置为:/usr/local/lib/libjansson.so

       //确定libjansson.so是否真的存在

          cd /usr/local/lib

       //如果存在,执行下面语句,创建一个libjansson.so的符号链接到/usr/lib目录下

          ln -s /usr/local/lib/libjansson.so /usr/lib/libjansson.so.4

       //重新加载库

          ldconfig

 常用接口函数:

json_t *json_string(const char *value)

        返回一个json string的数据类型,转换成这个库可以识别的格式。错误返回NULL,必须是UTF-8格式的。

       Return value: New reference.

       Returns a new JSON string, or NULL on error. value must be a valid UTF-8 encoded Unicode string.

json_t *json_string_nocheck(const char *value)

        与json_string()相同,不检查value的有效性

      Return value: New reference.

      Like json_string(), but doesn’t check that value is valid UTF-8. Use this function only if you are certain that this really is the case (e.g. you have already checked it by other means).

const char *json_string_value(const json_t *string)

       返回json string中的字符串,是c语言的字符串。

      Returns the associated value of string as a null terminated UTF-8 encoded string,

or NULL if string is not a JSON string.

      The retuned value is read-only and must not be modified or freed by the user. It is valid as long as string exists, i.e. as long as its reference count has not dropped to zero.

int json_string_set(const json_t *string, const char *value)

       设置string对应的值,如果value是无效的UTF-8值,设置失败。

     Sets the associated value of string to value. value must be a valid UTF-8 encoded Unicode string. Returns 0 on success and -1 on error.

int json_string_set_nocheck(const json_t *string, const char *value)

       与json_string_set()相同,只是不检查value是否是有效的UTF-8类型

Like json_string_set(), but doesn’t check that value is valid UTF-8. Use this function only if you are certain that this really is the case (e.g. you have already checked it by other means).

  

我主要是使用字符串的形式,参考的jansson-2.6/test/suites/api/test_object.c代码

下面的程序功能是:输出一个json格式的字符串,gcc 的时候别忘了加 -ljansson

需要特别注意的地方时jansson数组的处理,在需要循环的加入数组的时候需要使用 json_deep_copy()函数。如下例子:

json_t copy;

json_t object;

json_t array;

json_object_set_new (object, "test", json_string("testvalue1"));

copy = json_deep_copy(object);
json_array_append(arr, copy); json_object_set_new (object, "test", json_string("testvalue2")); copy = json_deep_copy(object);
json_array_append(arr, copy);

//下面的是处理字符串

#include <stdio.h>
#include <jansson.h> int event_jansson()
{
json_t *objectmsg;
char *result; objectmsg = json_object(); json_object_set_new (objectmsg, "inc", json_string("value-incID"));
json_object_set_new (objectmsg, "src", json_string("a"));
json_object_set_new (objectmsg, "des", json_string("b"));
json_object_set_new (objectmsg, "protocol", json_string("c"));
json_object_set_new (objectmsg, "policy", json_string("d"));
json_object_set_new (objectmsg, "snapshot", json_string("e"));
json_object_set_new (objectmsg, "name", json_string("f"));
json_object_set_new (objectmsg, "Type", json_string("g"));
json_object_set_new (objectmsg, "Path", json_string("h"));
json_object_set_new (objectmsg, "domain", json_string("i")); result = json_dumps(objectmsg, JSON_PRESERVE_ORDER); printf("result=%s\n",result); free(result);
json_decref(objectmsg);  return 0;
} int main()
{
  event_jansson();
return 0;
}

  

下面的程序是从一个json文件中取出内容。

tmp.json文件中的内容是:

{"name1": "value1", "name2": "value2", "name3": "value3", "name4": "value4"}

 vim test.c

#include <string.h>
#include <stdio.h>
#include <jansson.h> /* 关键字个数 */
#define COUNTMAX 256
/* 关键字长度 */
#define LENMAX 256 struct policymsg
{
int size;
char keyword[COUNTMAX][LENMAX];
char keycount[COUNTMAX][LENMAX];
}; /* 判断janson的类型 */
int my_json_type(json_t *value)
{
if(json_is_object(value))
{
printf("json_is_object\n");
return JSON_OBJECT;
} if(json_is_array(value))
{
printf("json_is_array\n");
return JSON_ARRAY;
} if(json_is_string(value))
{
printf("json_is_string\n");
return JSON_STRING;
} if(json_is_integer(value))
{
printf("json_is_integer\n");
return JSON_INTEGER;
} if(json_is_real(value))
{
printf("json_is_real\n");
return JSON_REAL;
} if(json_is_number(value))
{
printf("json_is_number\n");
} if(json_is_boolean(value))
{
printf("json_is_boolean\n");
} if(json_is_null(value))
{
printf("json_is_null\n");
return JSON_NULL;
} if(json_is_true(value))
{
printf("json_boolean(1)\n");
return JSON_TRUE;
} if(json_is_false(value))
{
printf("json_boolean(0)\n");
return JSON_FALSE;
}
} struct policymsg get_policy_json(char *jsonfile)
{
struct policymsg policyinfo;
int i, size;
void *iter;
json_t *object;
json_t *iter_values;
json_error_t error; object = json_object(); object = json_load_file (jsonfile, 0, &error);
policyinfo.size = json_object_size (object);
#if 0
//size = json_object_size (object);
//printf("size=%d\n", size);
/* 取出object中的值 */
//struct policy iter_get_value(json_t *object)
char *result;
result = json_dumps(object, JSON_PRESERVE_ORDER);
printf("result=%s\n", result);
/* 判断读取的jansson类型 */
printf("判断是什么类型\n");
my_json_type(object);
printf("result_size = %d\n", strlen(result));
#endif iter = json_object_iter(object);
i = 0;
while(1)
{
strcpy (policyinfo.keyword[i], json_object_iter_key(iter));
iter_values = json_object_iter_value(iter);
strcpy (policyinfo.keycount[i],json_string_value(iter_values)); //printf("values[%d]=%s\n", i,json_string_value(iter_values[i])); if((iter = json_object_iter_next(object, iter)) == NULL)
{
//printf("iterate end\n");
break;
}
i++;
} #if 0
iter = json_object_iter_at(object, "b");
if(iter)
{
iter_keys[i] = json_object_iter_key(iter);
iter_values[i] = json_object_iter_value(iter);
printf("values[%d]=%s\n", i,json_string_value(iter_values[i]));
}
#endif json_decref(object);
return policyinfo;
} #if 1
int main()
{ //result = "{\"objectmsg\": \"{\"name1\": \"value1\", \"name2\": \"value2\", \"name3\": \"value3\", \"name4\": \"value4\"}\", \"name5\": \"value6\"}";
//{"name1": "value1", "name2": "value2", "name3": "value3", "name4": "value4"}
char *str = "./tmp.json";
struct policymsg policyinfo;
policyinfo = get_policy_json(str);
int i = 0; while ( i < policyinfo.size)
{
printf ("keyword = %s\n", policyinfo.keyword[i]);
printf ("value = %s\n", policyinfo.keycount[i]);
i++;
}
}
#endif

  

编译:

gcc test.c -ljansson

linux 下jansson安装和使用的更多相关文章

  1. Linux下yum安装MySQL

    写这篇文章的原因是:在刚开始使用Linux操作系统时想要搭建LAMP环境,于是开始在Google和百度上各种寻找资料,碰到了不是很多的问题后,我决定写这篇文章总结一下在Linux下yum安装MySQL ...

  2. LINUX下编译安装PHP各种报错大集合

    本文为大家整理汇总了一些linux下编译安装php各种报错大集合 ,感兴趣的同学参考下. nginx1.6.2-mysql5.5.32二进制,php安装报错解决: 123456 [root@clien ...

  3. 【夯实PHP基础系列】linux下yum安装PHP APC

    Alternative PHP Cache(可选PHP缓存),依赖于 PECL扩展库 用源码方式安装,直接yum就行了:首先要安装apc的依赖包:yum install php-pear php-de ...

  4. Linux学习心得之 Linux下ant安装与使用

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Linux学习心得之 Linux下ant安装与使用 1. 前言2. ant安装3. 简单的a ...

  5. Linux下php安装Redis扩展

    说明: 操作系统:CentOS php安装目录:/usr/local/php php.ini配置文件路径:/usr/local/php7/etc/php.ini Nginx安装目录:/usr/loca ...

  6. linux下编译安装vim7.4并安装clang_complete插件

    linux下编译安装vim7.4并安装clang_complete插件 因为debian里软件仓库中下载安装的vim是不支持python写的插件的(可以打开vim,在命令模式先输入:py测试一下),导 ...

  7. linux下编译安装curl

    linux下编译安装curl 1.下载curl git clone https://github.com/curl/curl.git 2.在curl目录下生成configure文件 ./buldcon ...

  8. linux下编译安装boost库

    linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...

  9. linux下VMware安装出现的问题解决

    linux下VMware安装出现的问题解决 linux下VMware安装出现的问题解决 报错信息 问题1liboverlay-scrollbar.so和libunity-gtk-module.so加载 ...

随机推荐

  1. python 基础 2.6 break用法

    python中最基本的语法格式大概就是缩进了.python中常用的循环:for循环,if循环.一个小游戏说明for,if ,break的用法. 猜数字游戏: 1.系统生成一个20以内的随机数 2.玩家 ...

  2. 1194: [HNOI2006]潘多拉的盒子

    1194: [HNOI2006]潘多拉的盒子 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 464  Solved: 221[Submit][Stat ...

  3. Python 深入剖析SocketServer模块(二)(V2.7.11)

    五.Mix-In混合类 昨天介绍了BaseServer和BaseRequestHandler两个基类,它们只用与派生,所以贴了它们派生的子类代码. 今天介绍两个混合类,ForkingMix-In 和 ...

  4. EasyPlayer RTSP播放器对RTSP播放地址url的通用兼容修改意见

    问题反馈 最近在线上遇到一位老朋友咨询关于EasyPlayer播放器的事情,大概现象就是分别用EasyPlayer和vlc播放大华摄像机的RTSP流,流地址是:rtsp://admin:admin12 ...

  5. EasyPlayerPro(Windows)流媒体播放器开发之跨语言调用

    下面我们来讲解一下关于EasyPlayerPro接口的调用,主要分为C++和C#两种语言,C++也可以基于VC和QT进行开发,C++以VC MFC框架为例进行讲解,C#以Winform框架为例进行讲解 ...

  6. Node.js面试题

    Node.js面试题列表 什么是错误优先的回调函数? 如何避免回调地狱? 如何用Node来监听80端口? 什么是事件循环? 哪些工具可以用来保证一致的编程风格? 什么是测试金字塔?对于HTTP API ...

  7. 使用OpenSessionInViewFilter的注意事项

    假设在你的应用中Hibernate是通过spring 来管理它的session.如果在你的应用中没有使用OpenSessionInViewFilter或者OpenSessionInViewInterc ...

  8. 九度OJ 1147:Jugs(罐子) (模拟、游戏)

    时间限制:1 秒 内存限制:32 兆 特殊判题:是 提交:243 解决:200 题目描述: In the movie "Die Hard 3", Bruce Willis and ...

  9. zendstudio 13.0

    官网原版下载 http://downloads.zend.com/studio-eclipse/13.0.0/ZendStudio-13.0.0-win32.win32.x86.exe 破解补丁: 链 ...

  10. ubuntu 14.04 用 shell 方便安装nginx

    nginx.sh apt-get install -y build-essential gcc g++ make m4 libpcre3 libpcre3-dev libcurl4-gnutls-de ...