JSON快速入门
JSON具有简洁和清晰的层次结构,易于编写与阅读,同时也易于被机器解析和生成,使之成为理想的数据交换语言。

一. JSON简介
 1.定义:
JavaScript对象表示法(JavaScript Object Notation,简称:JSON)是一种轻量级的数据交换格式。


 2. 特点:
1) 采用键值对的文本格式存储和表示数据,使之完全独立于编程语言。
2) 具有简洁和清晰的层次结构,易于编写与阅读,同时也易于被机器解析和生成,使之成为理想的数据交换语言。


  3.设计思想:
JSON的语法是JavaScript对象表示语法的子集。JSON的设计基于两种结构,第一种是名称/值对的集合,通过键(名称)/值对形式来存储和表示数据;第二种是值的有序列表,在多数语言中,它可被实现为对象,数组,矢量,列表等,但对象和数组是比较特殊且常用的类型。下面将详细介绍JSON的设计思想:


1) 数据存储和表示方式:
通过键(名称)/值对形式来存储和表示数据,数据之间用逗号隔开。其格式如下:
key1: value1,key2: value2,…,keyN: valueN
注:键(名称)要写在双引号内,如:“age”:18。


2) JSON的值类型:   
JSON的值可支持多种类型的数据,包括:数字,字符串,字面值,对象和数组。
a)数字:
JSON的值可支持整型或浮点型的数据,举两个例子如下:
“age”: 18, “weight”: 64.235
b)字符串:
若JSON的值为字符串类型时,那么该字符串要写在双引号内,同键一样,如:
“name”:“Michael Jackson”
c)字面值:
JSON支持三个字面值,分别为:true,false,null,其中字面值的英文必须使用小写,如:
“flag”: true,“vaule”: false,“value”: null
a) 对象:
JSON的对象需要写在花括号{}内,且可包含多个键值对(也可包含数组),其格式如下:
{Key1: value1,key2: value2, … ,keyN: valueN}
b) 数组:
JSON的数组需要写在方括号[]内,其中数组可包含多个对象,其格式如下:
{“array”:[ { Key1: value1,key2: value2, … ,keyN: valueN }
              { age1: number1,age2: number2, … ,ageN: ageN }]
}


二. 常见开源JSON库简介
1) CJSON:
CJSON是基于C语言编写的JSON库,可用于创建和解析JSON文件,其具有轻巧便捷,简单易用,函数接口功能全的优点。CJSON主要包含了cjson.c和cjson.h两个文件,其中cjson.h头文件主要定义了一些JSON格式的结构体,以及声明了一些操作JSON格式的功能函数,如:创建/读取JSON格式的函数,向JSON格式中添加各种值(数字/字符串/数组/对象等)的函数等;cjson.c主要是对cjson.h中功能函数进行定义。
关于CJSON的详细介绍,可阅读:
https://blog.csdn.net/jipengwang/article/details/72817248

2) Jackson:
Jackson是Java的开源JSON库,可用于序列化和反序列化JSON,是一款被广泛使用的JSON解析器。Jackson有众多优点,如:简单易用,运行所需内存小,对jar包依赖性低等。其核心模块包括:Jackson-core核心包,Jackson-annotations注释包,Jackson- databind数据绑定包。关于Jackson的详细介绍,可阅读:
https://blog.csdn.net/zhipengfang/article/details/117451831

3) Jsoncpp:
Jsoncpp是C++的开源JSON库,它提供了3个核心类,分别是:Reader;Writer和Value。其中,Reader类可用来解析JSON,它负责从字符串或输入流中解析JSON文档,并最后生成代表JSON文档的Value对象;Writer类可将内存中的Value对象转换成对应的JSON文档,并把文档输出到文件或字符串中;Value类的对象可表示一个JSON值,这个JSON值既可以代表一个文档,也可以代表文档中的一个值。关于Jsoncpp的详细介绍,可阅读:
https://blog.csdn.net/yc461515457/article/details/52749575/
 
三. JSON应用介绍
海康机器人智能相机产品功能丰富,包含了计数,有无,测量以及识别工具,每个工具类型又包含多个功能模块。现以智能相机SC3000系列识别工具中的码识别模块为例,简述JSON在SC3000相机中所起的作用。 


智能相机在实现模块功能时,需要使用到6个JSON文件,每个JSON文件的设计都是遵循了上文提到的设计思想,以此进行相应的数据交换。各个JSON文件的名称及作用如下:
● 模块能力集(abi_conf.json):定义了模块算子的属性,能力集等信息,以此对客户端形成一定的约束,如定义码识别模块为识别类的工具。
● 输入输出参数(io_conf.json):定义了模块算子的输入输出参数,并结合配置参数实现算子的功能。
● 配置参数(pm_conf.json):定义了模块算子的配置参数,配置参数是模块在客户端能够被配置的参数,如图1所示的码识别模块的>识别设置>二维码类型>QR码/DM码,这两个码就是可以被选择配置的参数。
● UI界面参数(ui_conf.json):定义了模块算子在客户端需要显示的参数,如码识别模块的>识别设置>二维码类型,该二维码类型就是需要在客户端上显示的UI参数。
● 显示参数(disp_conf.json)定义了模块算子在客户端结果显示区的参数,如图2所示:二维码匹配框的位置参数;得分在匹配框的位置参数等。
● ROI参数(roi_type.json):定义了模块算子在客户端结果显示区的检测区域ROI的位置等相关参数。


 
                                图1 码识别模块UI界面
 


                                     图2 码识别模块结果显示区


参考资料:
1. JSON百科:https://baike.baidu.com/item/JSON/2462549?fr=aladdin 
2. JSON的简单介绍以及C语言的JSON库使用:https://www.pianshen.com/article/4234749016/
3. Jsoncpp使用说明:
https://download.csdn.net/download/stonylee/6468805?utm_medium=distribute.wap_relevant.none-task-download-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.essearch_wap_relevant&depth_1-utm_source=distribute.wap_relevant.none-task-download-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.essearch_wap_relevant



版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
上一篇
已经是第一篇啦~
下一篇

用wireshark抓包分析GVCP协议入门

评论请先登录 登录
全部评论 0
Lv.0
1
关注
382
粉丝
77
创作
875
获赞
相关阅读
  • 探寻机器视觉新星|第二届“启智杯”机器视觉设计大赛获奖名单公布
    2024-04-08 浏览 0
  • VM4.4更新亮点
    2024-04-12 浏览 0
  • 第二届启智杯—光伏电池片质检视觉方案设计
    2024-04-15 浏览 0
  • 每日分享|3D视觉成像之双目立体视觉原理
    2024-03-21 浏览 0
  • 海康AMR应用场景中蜂鸣器的使用
    2024-04-03 浏览 0

请升级浏览器版本

您正在使用的浏览器版本过低,请升级最新版本以获得更好的体验。

推荐使用以下浏览器