Linux下JSON通信协议的使用和解析

本文介绍了JSON通信协议的概念,作为数据交换的轻量级格式,JSON比XML更小、更快、更易解析。文章详细讲解了JSON的语法,包括对象、数组和字符串,并通过CJSON库展示了在Linux下如何使用和解析JSON,包括创建JSON结构体、解析JSON数据以及释放内存等操作。
摘要由CSDN通过智能技术生成

1.JSON通信协议的概念

JavaScript 对象表示法( JavaScript Object Notation) 。是一种轻量级的数据交换格式。 它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式, 但是也使用了类似于C语言家族的习惯( 包括C、 C++、 C#、 Java、 JavaScript、 Perl、 Python等) 。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。

JSON 解析器和 JSON 库支持许多不同的编程语言。 JSON 文本格式在语法上与创建 JavaScript 对象的代码相同。 由于这种相似性, 无需解析器, JavaScript 程序能够使用内建的 eval() 函数, 用 JSON 数据来生成原生的 JavaScript 对象。

JSON 是存储和交换文本信息的语法。 类似 XML。 JSON 比 XML 更小、 更快, 更易解析。JSON 具有自我描述性, 语法简洁, 易于理解。

2.JSON的语法

JSON建构于两种结构:

  • “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
  • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

这两种结构是常见的JSON数据结构,同时在不同的语言中也都是相通使用的。

JSON的语法JavaScript 语法的子集:

  • 键/值对 key:value,用半角冒号分割。 比如 “Email”:“110”
  • 数据由逗号分隔
  • 大括号保存对象,也称为一个文档对象
  • 中括号保存数组 ,数组成员可以是对象,值,也可以是数组(只要有意义)。 {“paly”: [“斗地主”,“王者”,“吃鸡”]}
2.1JSON对象

对象?你会想我一个单身狗哪里来的对象,哈哈!
当然,这和C++中的对象不太一样。

对象是一个无序的“‘名称/值’对”集合。一个对象以 {左括号 开始, }右括号 结束。每个“名称”后跟一个 :冒号 ;“‘名称/值’ 对”之间使用 ,逗号 分隔。

对象可以包含多个 key/value(键/值)对。其中key 必须是字符串,value 可以是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。key 和 value 中使用冒号(:)分割。每个 key/value 对使用逗号(,)分割。

如下:

{
    "play":"football" , "run": 10000 }

如果想要访问其中的内容可以使用"."访问:var x = play.football

2.2JSON数组

数组是值(value)的有序集合。一个数组以 [左中括号 开始, ]右中括号 结束。值之间使用 ,逗号 分隔。
数组可包含多个对象。这里数组就是大哥了,对象可以是它的小弟了
JSON 中数组值必须是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。

如下:

{
    
      "game":[
               {
    "name":"和平精英" , "user":"eveybody" }, 
               {
    "name":"王者荣耀""user":"youngman"}
             ]
}
2.3JSON字符串

字符串(string)是由双引号包围的任意数量Unicode字符的集合,使用反斜线转义。一个字符(character)即一个单独的字符串(character string)。字符串(string)与C或者Java的字符串非常相似。盗图如下:
在这里插入图片描述

3.JSON的使用与解析

在我们使用JSON通信协议之前,有很多东西是不用我们自己写的,直接下载相应的cJSON.c文件和cJSON.h就可以使用了,在使用的时候只需要调用.c文件中相应的功能函数就可以了。

下载地址:https://gitee.com/sample_commander/G4-module-SMS-cat/tree/master/socket

CJSON 作为JSON格式的解析库,功能无外乎构建和解析JSON格式,采用CJSON的设备,以JSON的格式发送数据,收到JSON格式的数据,解析成可供应用识别的功能。

3.1JSON结构体

JSON结构体也是写在cJSON.c文件中的,但是这也是一个非常重要的结构体,必须了解才能使用。

/* The cJSON structure: */
typedef struct cJSON
{
   
      /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */
      struct cJSON *next;
      struct cJSON *prev;
      /* An array or object item will have a child poin
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值