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);

2、列出json-c里的一些函数做说明

extern struct json_object* json_object_from_file(const char *filename);

说明:将参数中制定的json文件转换为json对象

extern int json_object_to_file(char *filename, struct json_object *obj);

说明:将json对象写回到文件,并返回状态

extern struct json_tokener* json_tokener_new(void);

说明:

该函数返回一个json_tolener对象并做相应初始化

struct json_tokener //这是json_tokener的结构定义,关于json解析的信息都包含于此,例如状态、错误等信息

{

char *str;

struct printbuf *pb;

int max_depth, depth, is_double, st_pos, char_offset;

enum json_tokener_error err;

unsigned int ucs_char;

char quote_char;

struct json_tokener_srec *stack;

int flags;

};

extern void json_tokener_free(struct json_tokener *tok);

说明:   对tok进行析构,即做一些释放、赋初值等操作。

extern struct json_object* json_tokener_parse(const char *str);

说明:  解析一个字符串并返回一个相应类型的json_object对象,例如传入的字符串为"[\"abc\",null,\"def\",12]",那么便返回一个数组类型的json对象

extern json_bool json_object_object_get_ex(struct json_object* obj,

const char *key,

struct json_object **value);

说明:

通过参数中给定的字段得到相应的json对象,如果找到就返回true,否则返回false,找到的json对象通过value得到该函数与json_object_object_get功能相同,只是json_object_object_get是直接返回json对象。

c语言json结构体_C语言:json库使用学习相关推荐

  1. c语言json结构体_C语言解析JSON源码

    2020-01-09 关键字:cJSON.linux JSON解析 JSON 是一种在互联网领域内很常用的轻量级数据交换协议. 它与 XML 的地位差不多,但就笔者而言,笔者更喜欢 JSON 的风格, ...

  2. c++ new一个结构体_C语言结构体,又一个纸老虎,纯干货讲解(附代码)

    来源:网络,排版整理:晓宇 微信公众号:芯片之家(ID:chiphome-dy)结构体的定义结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构.结构体和其他类型基础数 ...

  3. java发送c语言结构体_C语言中结构体直接赋值?

    在C语言中结构体变量之间可以进行赋值操作吗? 简单结构体的赋值 先说结论:一般来说,C语言中的结构体变量可以用另一个变量对其进行赋值或初始化.简单结构体(不包含指针成员)直接赋值没有问题. 我们先下面 ...

  4. 用JAVA定义两个结构体_c语言struct结构体的定义和使用

    c语言由于不像java,c#,c++等语言有对象,所以就用struct结构体来表示,其实作用是差不多的,下面来快速学习c语言struct结构体的定义和使用,以学生类student来举例,有三种定义方式 ...

  5. cjson 对象是json数组型结构体_C语言cJSON库的使用,解析json数据格式

    对于c语言来说是没有字典这样的结构的,所以对于解析json格式的数据来说不是那么好解析,但是有些时候又会需要处理这样的数据格式,这里就有一个解析json的函数库可以给我们使用了.这个函数库就是cJSO ...

  6. c语言 结构体_C语言 技能提升 系列文章 (三)结构体

    今天,来跟大家聊一聊C语言中的结构体. 在C语言的各种数据类型中,结构体最特别,因为它是可以被程序员定义的,它的特点是非常的灵活. 定义 struct defined_name{ type_name ...

  7. 第十章 结构体_C语言typedef的用法详解

    C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样. 起别名的目的不是为了提高程序运行效率,而是为了编码方便.例如有一个结构体的名字是 stu,要想定义一个结构体变量就 ...

  8. 第十章 结构体_C语言共用体(C语言union用法)详解

    通过前面的讲解,我们知道结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员.在C语言中,还有另外一种和结构体非常类似的语法,叫做共用体(Union),它的定义格式为:  un ...

  9. c语言 typeof 结构体,Go语言通过反射获取结构体的成员类型

    任意值通过 reflect.TypeOf() 获得反射对象信息后,如果它的类型是结构体,可以通过反射值对象(reflect.Type)的 NumField() 和 Field() 方法获得结构体成员的 ...

最新文章

  1. [置顶] 自己动手实现OpenGL之glViewPort(一)
  2. 奥数国家队最强6人集结,深圳中学独占2席,人大附中连续三年入围
  3. Codeforces 919 D Substring
  4. 配件都包括什么_婚礼婚庆服务都包括什么
  5. php表单确认密码,jQuery表单验证之密码确认实例详解
  6. Python爬虫入门教程 22-100 CSDN学院课程数据抓取
  7. 基于layui的select区域联动
  8. (7)数据结构-基本队列实现
  9. Word转换成pdf之pdf虚拟打印机如何使用操作教程
  10. vue 调用 js 获取的今天日期、本周、本月、本年起始和结束日期
  11. 【论文解读】Stacked Hourglass Networks
  12. 深入理解Android系统网络架构
  13. 大一作业HTML期末网页作业(化妆品网站制作) html+css+js 雅诗兰黛美妆网站制作
  14. 倍福 TwinCAT背景知识
  15. ActionScript 大型网页游戏开发
  16. substr函数c语言实现,substr是什么函数?怎么用
  17. c语言已知银行定期的整存整取,c语言问题,与“银行整存整取存款不同期限的月息利率”有关,高手进...
  18. srsLTE 源码分析 UE_06 PLMN选择之SIB1
  19. Unity基础(三)3D场景搭建
  20. MATLAB实现CRC校验码的计算

热门文章

  1. 使用DSP完成Id=0的永磁同步电机闭环控制思路
  2. linux内核的红黑树
  3. C#连接Excel文件的连接字符串
  4. Android身份证扫描拍照识别SDK
  5. 国产化适配(身份证读卡器,条码枪,扫描仪,ca证书,在线文档编辑器)
  6. 仿生多足机器人的发展和落地
  7. 胧月初音未来计算机,胧月---初音未来(调教用)
  8. 从零搭建FPGA区块链运算机——ASIC、GPU、FPGA对比
  9. SERVER SQL CASE
  10. sql语句条件判断函数(流程控制函数)