c语言json库如何调用,C语言:json库的使用

Json基础

一、Json的概念

Json(Javascript Object Notation)全称为JavaScript对象表示法,是一种轻量级的数据交换格式,采用完全独立于语言的文本格式。JSON 是存储和交换文本信息的语法,类似 XML。JSON 比 XML 更小、更快,更易解析。

1、Json的特性

JSON 是纯文本

JSON 具有“自我描述性”(人类可读)

JSON 具有层级结构(值中存在值)

JSON 可通过 JavaScript 进行解析

JSON 数据可使用 AJAX 进行传输

2、与XML的对比

Json与XML很是相似,关于它们的不同,主要例举以下几点:

没有结束标签

更短

读写的速度更快

能够使用内建的 JavaScript eval() 方法进行解析

使用数组

不使用保留字

二、Json的用途

大致与XML相同

三、Json的语法简要说明

1、Json语法规则

(1)、数据在名称/值对中

(2)、数据由逗号分隔

(3)、花括号保存对象

(4)、方括号保存数组

2、JSON 名称/值对与Json值

JSON 数据的书写格式是:名称/值对。

示例:"firstName" : "John"

Json的值可以是数字、字符串、布尔值、数组、对象、空值等等。

3、Json对象

Json对象在花括号中书写,一个对象可以包含多个名称/值对(即多个数据)。

4、Json数组

JSON 数组在方括号中书写:

数组可包含多个对象:

{"employees": [

{ "firstName":"John" , "lastName":"Doe" },

{ "firstName":"Anna" , "lastName":"Smith" },

{ "firstName":"Peter" , "lastName":"Jones" }

]}

在上面的例子中,对象 "employees" 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。

四、Json的简易使用例子

1、使用json-c库的函数

1 json_object *my_string;2

3 my_string = json_object_new_string("\t");4 g_print("my_string = %s\n",json_object_get_string(my_string));5 g_print("my_string.to_string()=%s\n",json_object_to_json_string(my_string));6 json_object_put(my_string);//减少引用计数

7

8 my_string = json_object_new_string("\\");9 g_print("my_string=%s\n", json_object_get_string(my_string));10 g_print("my_string.to_string()=%s\n", json_object_to_json_string(my_string));11 json_object_put(my_string);12

13 my_string = json_object_new_string("foo");14 g_print("my_string=%s\n", json_object_get_string(my_string));15 g_print("my_string.to_string()=%s\n",json_object_to_json_string(my_string));

输出结果:

my_string =

my_string.to_string()="\t"

my_string=\

my_string.to_string()="\\"

my_string=foo

my_string.to_string()="foo"

说明:

//Create a new empty json_object of type json_type_xxx

//创建一个xxx类型的空json对象,引用计数加一

extern struct json_object* json_object_new_xxx(xxx s);

//减少obj的引用计数,当计数为0时就释放掉该对象

int json_object_put(struct json_object *obj);

通过json_object_get_string与json_object_to_json_string的输出结果可以比较出前者是提取出字符串值并返回,后者是将字符串以json格式返回。

这两个函数返回的字符串由json_object管理,即my_string被json_object_put减少引用计数至0后字符串内存被释放

1 json_object *my_array;2 my_array =json_object_new_array();3 //添加json类型值到数组中

4 json_object_array_add(my_array,json_object_new_int(1));5 json_object_array_add(my_array,json_object_new_int(2));6 json_object_array_add(my_array,json_object_new_int(3));7 json_object_array_put_idx(my_array,4,json_object_new_int(5));8 g_print("my_array=\n");9 for(i=0;i

输出结果:

my_array=

[0]=1

[1]=2

[2]=3

[3]=null

[4]=5

my_array.to_string() = [ 1, 2, 3, null, 5 ]

说明:

//往值为数组类型的json_object中添加json对象。

extern int json_object_array_add(struct json_object *obj,

struct json_object *val);

//插入或替换在数组中idx索引下的元素,引用计数不会变化

extern int json_object_array_put_idx(struct json_object *obj, int idx,

struct json_object *val);

//得到类型为数组的json_object的长度

extern int json_object_array_length(struct json_object *obj);

//得到数组中索引为idx的元素

extern struct json_object* json_object_array_get_idx(struct json_object *obj,

int idx);

1 json_object *my_object;2 my_object =json_object_new_object();3 //添加json名称和值到json对象集合中

4 json_object_object_add(my_object,"abc",json_object_new_int(12));5 json_object_object_add(my_object,"foo",json_object_new_string("bar"));6 json_object_object_add(my_object,"bool0",json_object_new_boolean(FALSE));7 json_object_object_add(my_object,"bool1",json_object_new_boolean(TRUE));8 json_object_object_add(my_object,"baz",json_object_new_string("bang"));9 //同样的key添加会替换掉

10 json_object_object_add(my_object,"baz",json_object_new_string("fark"));11 json_object_object_del(my_object,"baz");12

13 g_print("my_object=\n");14 //遍历对象集合

15 json_object_object_foreach(my_object,key,val){16 g_print("\t%s : %s\n",key,json_object_to_json_string(val));17 }18 g_print("my_object.to_string() = %s\n",json_object_to_json_string(my_object));

输出结果:

my_object=

abc    :    12

foo    :    "bar"

bool0    :    false

bool1    :    true

my_object.to_string() = { "abc": 12, "foo": "bar", "bool0": false, "bool1": true }

说明:

//添加一个json对象字段到类型为object的obj中去

extern void json_object_object_add(struct json_object* obj, const char *key,

struct json_object *val);

//删除指定的字段,并且被删除的对象的引用计数会被减一

extern void json_object_object_del(struct json_object* obj, const char *key);

原文:http://www.cnblogs.com/xishuichangliu/p/6214249.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值