一文搞懂JSON

什么是JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于将数据结构化地传输和存储。它由键值对组成,采用类似于JavaScript对象的格式来表示数据。JSON易于阅读和编写,并且易于解析和生成,成为广泛应用于Web应用程序和数据交换的标准格式之一。


JSON的基本数据类型

类型解释案例
字符(String)由双引号包围的Unicode字符序列"Hello, World!"
数字(Number)包括整数和浮点数42,3.14
布尔值(Boolean)表示真或假,C相关的实现库可能会用0和1表示值为true或false
空值(Null)表示空值值为null
对象(Object)由一组无序的键值对组成,键是字符串,值可以是任意的JSON数据类型。键值对之间使用逗号分隔,整个对象使用花括号{}包围

{"name": "John",

"age": 30,

"city": "New York"}

数组(Array)由一组有序的值组成,值可以是任意的JSON数据类型。值之间使用逗号分隔,整个数组使用方括号[]包围[1, 2, 3, 4, 5]

JSON的特点和优势(了解)

1.简洁和易读:JSON使用简洁的文本格式表示数据,易于阅读和编写。

2.平台无关性:JSON是一种独立于编程语言和平台的数据格式,可被多种编程语言解析和生成。

3.易于解析和生成:JSON的解析和生成相对简单,各种编程语言都提供了相应的JSON解析器和生成器。

4.支持复杂数据结构:JSON支持嵌套、复杂的数据结构,可以表示对象、数组和各种组合类型的数据。

5.与Web应用程序兼容性良好:JSON广泛用于Web应用程序中,可以轻松地与JavaScript进行交互。

JSON格式规范(重点)

1. 数据使用键值对表示,键和值之间使用冒号(:)分隔。

例如:{"name": "John", "age": 30}

2. 键使用双引号(")包围,值可以是字符串、数字、布尔值、对象、数组或null。 

例如:{"name": "John", "age": 30, "isStudent": true, "address": null}

3. 键值对之间使用逗号(,)分隔,最后一个键值对后不应有逗号。 

例如:{"name": "John", "age": 30}

4. 字符串值使用双引号(")包围,可以包含任意Unicode字符序列,特殊字符可以使用转义字符表示。 

例如:"Hello, World!", "I "love" JSON"

5. 数字可以是整数或浮点数,不使用引号包围。 

例如:42, 3.14

6. 布尔值只有两个取值:true和false,不使用引号包围。 

例如:true, false

7. 数组使用方括号([])包围,值之间使用逗号分隔。 

例如:[1, 2, 3, 4, 5]

8. 对象使用花括号({})包围,键值对之间使用逗号分隔。 

例如:{"name": "John", "age": 30}

9. JSON是严格区分大小写的,键和字符串值都应该使用双引号包围。

10. JSON可以嵌套,允许在对象中包含对象或数组,或在数组中包含对象或其他数组。

11. JSON不支持注释,不允许在JSON数据中添加注释。

下面是一个简单的JSON

{
  "name": "southernbrid",
  "age": 14,
  "gender": true,
  "height": 1.65,
  "grade": null,
  "skills": [
    "JavaScript",
    "Java",
    "Python",
    "Lisp"
  ]
}

分享个JSON格式校验网站

在线JSON校验格式化工具(Be JSON)

JSON的基本操作

JSON的基本操作通常涉及以下几个方面:

1.创建JSON对象: 可以使用编程语言提供的函数、类或库来创建JSON对象。通常,这些函数或方法接受键值对作为参数,用于指定JSON对象的属性和对应的值。

2.解析JSON字符串: 将JSON字符串解析为相应的数据结构,如对象、数组或基本数据类型。编程语言提供相应的解析函数或方法,可以将JSON字符串转换为可操作的数据对象。

3.生成JSON字符串: 将数据对象转换为JSON字符串的表示形式,以便于传输、存储或与其他系统进行交互。编程语言提供相应的函数或方法,可以将数据对象转换为符合JSON格式规范的字符串。

4.访问和修改JSON对象的属性: 通过键访问JSON对象的属性,并可以对其进行修改。可以使用编程语言提供的API来访问、读取和修改JSON对象的属性值。

5.遍历JSON数组: 遍历JSON数组中的元素,逐个访问和处理数组中的数据项。使用循环结构来遍历数组,根据索引或迭代器获取数组中的每个元素。

6.嵌套JSON操作: 处理嵌套的JSON结构,包括访问、修改和操作嵌套的对象或数组。可以使用递归、循环等方法来处理嵌套的JSON结构。

7.序列化和反序列化(重点): 将JSON对象序列化为字符串,或将JSON字符串反序列化为对象。序列化是将数据对象转换为JSON字符串,反序列化是将JSON字符串转换为数据对象。(本文主要介绍C语言的JSON库来进行序列化和反序列化)

下面是一个C库,用来完成本文教学

📎cJSON.c

https://www.yuque.com/attachments/yuque/0/2023/txt/35243076/1687951166715-b8398dec-d697-4507-b49e-1e2ea5595ce9.txt

📎cJSON.h

https://www.yuque.com/attachments/yuque/0/2023/txt/35243076/1687951166713-f66a28ef-8aaa-4fb0-8f7c-7fa49d94b608.txt


下面两篇文章也能帮助我们完成JSON序列化和JSON反序列化的操作

cJSON 使用详解_无痕眼泪的博客-CSDN博客

由于c语言中,没有直接的字典,字符串数组等数据结构,所以要借助结构体定义,处理json。如果有对应的数据结构就方便一些, 如python中用json.loads(json)就把json字符串转变为内建的数据结构处理起来比较方便。一个重要概念:在cjson中,json对象可以是json,可以是字符串,可以是数字。。。cjson数据结构定义:#d..._cjson

https://blog.csdn.net/qq_32172673/article/details/88305781

https://www.cnblogs.com/liunianshiwei/p/6087596.html

https://www.cnblogs.com/liunianshiwei/p/6087596.html

编译注意事项

编译cJSON库时候,gcc需要增加  -lm 选项,动态链接math库。

打赏
关键词: JSON

42 评论

  1. jiyouzhan
    网友jiyouzhan留言:
    这篇文章写得深入浅出,让我这个小白也看懂了!
  1. 访客|46:54|46:54
    网友访客|46:54|46:54留言:
    意昂体育平台注册www.ycszssghyxh.com
  1. 访客|45:10|45:10
    网友访客|45:10|45:10留言:
    索妮http://www.gstdzs.com
  1. 访客|24:06|24:06
    网友访客|24:06|24:06留言:
    毒龙潭http://www.clmdq.com
  1. 访客|24:06|24:06|24:39|24:39
    无声深处http://www.cxhmgs.com
  1. 访客|56:35|56:35
    网友访客|56:35|56:35留言:
    神兵总动员http://www.ueedm.com
  1. 访客
    网友访客留言:
    识别码:dwyrpt89032AG-身无分文怎么找适合的工作http://www.zsdai.com/post/21348.html
  1. 访客
    网友访客留言:
    识别码:zuwjct57821LV-急用钱黑名单办贷款http://www.zsdai.com/post/51904.html
  1. 访客
    网友访客留言:
    识别码:jbuokr04873MT-负债高借款平台哪个容易通过http://www.slearning.cn/post/58401.html
  1. 访客1
    网友访客1留言:
    识别码:zsbuae10375TB-文章写的真不错www.lnlmw.com
  1. 访客
    网友访客留言:
    识别码:rfpwal90456CR-债务重组的方式有哪些http://www.lhtyyynk.net/tags-24.html
  1. 访客
    网友访客留言:
    识别码:gnjbvt62940NV-花户可以下款的口子http://www.lhtyyynk.net/tags-12.html
  1. 访客
    网友访客留言:
    识别码:gmjvti96371ZD-有逾期可以申请的网贷公司http://www.zsdai.com/post/24937.html
  1. 访客
    网友访客留言:
    识别码:ecgadb21608DV-哪个平台首次借款免息http://www.lhtyyynk.net/tags-15.html
  1. 访客
    网友访客留言:
    识别码:qmuwtc04568XB-微信借500能立案吗http://www.slearning.cn/post/60184.html
  1. 访客
    网友访客留言:
    识别码:pxgdbj05329KS-金瀛分期借款大王app下载http://www.zsdai.com/post/2628.html
  1. 访客
    网友访客留言:
    识别码:yrnbwo27948AV-花户怎么能贷到钱http://www.zsdai.com/post/16040.html
  1. 访客1
    网友访客1留言:
    识别码:bmjcky08435UD-这游戏真不错!http://www.dnf70.com/1202.html
  1. 访客11
    网友访客11留言:
    识别码:sxatmy74815EB-这游戏真不错!http://www.a5km.com/yxgl/jdqs/27702.html
  1. 访客1
    网友访客1留言:
    识别码:yzmnjv27819QY-这游戏真不错!http://www.a5km.com/yxgl/dnf/22470.html
  1. 访客1
    网友访客1留言:
    识别码:frazov80314DW-这游戏真不错!http://www.a5km.com/yxgl/dnf/22491.html
  1. 访客
    网友访客留言:
    识别码:lzpagi48392CT-小额贷款满16周岁的http://www.lhtyyynk.net/post/27.html
  1. 访客
    网友访客留言:
    识别码:xgptzw54602WP-小额零用贷http://www.lhtyyynk.net/tags-8.html
  1. 访客直播软件APP直播软件APP
    识别码:viofhu35749PJ-上车走吧http://www.wstyn.com
  1. 访客直播软件APP直播软件APP直播软件APP直播软件APP
    识别码:fuaklq97236QC-风云2粤语http://www.zzzynk.com
  1. 访客
    网友访客留言:
    识别码:mnrjuy90482RU-闪电贷5.76 有必要吗http://www.zsdai.com/post/483.html
  1. 访客
    网友访客留言:
    识别码:gntawk24508NO-有没有直接通过的小额贷款http://www.zsdai.com/post/58419.html
  1. 访客
    网友访客留言:
    识别码:zhoriq37915QL-花户借钱的平台100%能借到http://www.lhtyyynk.net/post/29.html
  1. 访客|00:55|00:55
    网友访客|00:55|00:55留言:
    内容详实,论据充分www.tritonyachting.com
  1. 访客
    网友访客留言:
    识别码:fcqxlh18092FO-个人急用钱的联系我电话 兴义市http://www.slearning.cn/tags-55505.html
  1. 访客
    网友访客留言:
    识别码:flgerj02567ZC-贷款平台那个好下款http://www.lhtyyynk.net/post/24.html
  1. 访客
    网友访客留言:
    识别码:sydmhx95632CP-借钱一直被拒哪里能借到http://www.slearning.cn/tags-2816.html
  1. 访客
    网友访客留言:
    识别码:alonzu09634GE-短期借款一般多久http://www.zsdai.com/post/37890.html
  1. 访客
    网友访客留言:
    识别码:lbtjev46078GC-急需30万有没有借的http://www.zsdai.com/post/35170.html
  1. 访客1
    网友访客1留言:
    识别码:eahwoc21489GJ-这游戏真不错!http://www.a5km.com/yxgl/jdqs/29303.html
  1. 访客11111
    网友访客11111留言:
    识别码:ltoevk80493EK-这游戏真不错!http://www.a5km.com/yxgl/jdqs/28643.html
  1. 访客111111
    网友访客111111留言:
    识别码:cxszmo24763TI-这游戏真不错!http://www.a5km.com/yxgl/jdqs/29257.html
  1. 访客111111111
    网友访客111111111留言:
    识别码:hjcrbe47609AE-这游戏真不错!http://www.a5km.com/yxgl/jdqs/28073.html
  1. 访客111111111
    网友访客111111111留言:
    识别码:webdru84236PG-这游戏真不错!http://www.dnf70.com/3096.html
  1. 访客1
    网友访客1留言:
    识别码:xievur69028DF-这游戏真不错!http://www.3553km.com
  1. 访客1
    网友访客1留言:
    识别码:itwamq10274QZ-这游戏真不错!http://www.3553km.com

发表评论