linux 下源码安装JSon库,linux 下jansson安装和使用

我主要是使用字符串的形式,参考的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

#include

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

",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

#include

#include

/* 关键字个数 */

#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

");

return JSON_OBJECT;

}

if(json_is_array(value))

{

printf("json_is_array

");

return JSON_ARRAY;

}

if(json_is_string(value))

{

printf("json_is_string

");

return JSON_STRING;

}

if(json_is_integer(value))

{

printf("json_is_integer

");

return JSON_INTEGER;

}

if(json_is_real(value))

{

printf("json_is_real

");

return JSON_REAL;

}

if(json_is_number(value))

{

printf("json_is_number

");

}

if(json_is_boolean(value))

{

printf("json_is_boolean

");

}

if(json_is_null(value))

{

printf("json_is_null

");

return JSON_NULL;

}

if(json_is_true(value))

{

printf("json_boolean(1)

");

return JSON_TRUE;

}

if(json_is_false(value))

{

printf("json_boolean(0)

");

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

", size);

/* 取出object中的值 */

//struct policy iter_get_value(json_t *object)

char *result;

result = json_dumps(object, JSON_PRESERVE_ORDER);

printf("result=%s

", result);

/* 判断读取的jansson类型 */

printf("判断是什么类型

");

my_json_type(object);

printf("result_size = %d

", 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

", i,json_string_value(iter_values[i]));

if((iter = json_object_iter_next(object, iter)) == NULL)

{

//printf("iterate end

");

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

", 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

", policyinfo.keyword[i]);

printf ("value = %s

", policyinfo.keycount[i]);

i++;

}

}

#endif

编译:

gcc test.c -ljansson

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值