当前位置: 首页 > news >正文

配置文件格式 JSON 快速上手

文章目录

  • 1.语法
  • 2.实例
  • 3.解析
  • 参考文献

JSON(JavaScript Object Notation) 是轻量级的文本数据交换格式,独立于语言,具有自我描述性。JSON 类似于 XML,但比 XML 更小、更快,更易解析。

1.语法

JSON 语法是 JavaScript 对象表示法语法的子集。

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 花括号保存对象
  • 方括号保存数组

名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值:

"firstName" : "John"

一个合法的 JSON 可以是:

  • 数字(整数或浮点数)
  • 字符串(在双引号中)
  • 布尔(true 或 false)
  • 数组(在方括号中)
  • 对象(在花括号中)
  • null

JSON 对象在花括号中书写,对象可以包含多个名称/值对,使用逗号分隔:

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

JSON 数组在方括号中书写,数组可包含多个对象:

{
"employees": [{ "firstName":"John" , "lastName":"Doe" },{ "firstName":"Anna" , "lastName":"Smith" },{ "firstName":"Peter" , "lastName":"Jones" }
]
}

2.实例

下面以 JSON 表示一个简单的后台服务配置:

{"-name": "UserProfileServer","maxconns": "1000","queuecap": "10000","queuetimeout": "300","loginfo": {"loglevel": "ERROR","logsize": "10M","lognum": "10","logpath": "/usr/local/app/log"}
}

其中 -name 表示服务的名称,前面一个横杠表示该值可以转换为 XML 的标签属性。其它的键值对表示服务的各个配置项。

3.解析

下面以 Go 为例,利用 Go 自带的 JSON 包 encoding/json 完成对上面服务配置的解析。

第一步,将 JSON 串转换为 Go struct。把上面的 JSON 串粘贴到 Convert JSON to Go struct。

type Server  struct {Name         string `json:"-name"`Maxconns     string `json:"maxconns"`Queuecap     string `json:"queuecap"`Queuetimeout string `json:"queuetimeout"`Loginfo      struct {Loglevel string `json:"loglevel"`Logsize  string `json:"logsize"`Lognum   string `json:"lognum"`Logpath  string `json:"logpath"`} `json:"loginfo"`
}

第二步,利用 Go 自带的 JSON 包 encoding/json 解析上面以 JSON 串表示的配置信息。

package mainimport("encoding/json""io/ioutil""fmt""os"
)func main() {file, err := os.Open("server.json")if err != nil {fmt.Printf("error:%v\n", err)return}defer file.Close()data, err := ioutil.ReadAll(file)if err != nil {fmt.Printf("error: %v", err)return}v := Server{}err = json.Unmarshal(data, &v)if err != nil {fmt.Printf("error:%v\n", err)return}fmt.Printf("%+v\n", v)
}

运行输出:

{Name:UserProfileServer Maxconns:1000 Queuecap:10000 Queuetimeout:300 Loginfo:{Loglevel:ERROR Logsize:10M Lognum:10 Logpath:/usr/local/app/log}}

参考文献

JSON
Golang: Convert JSON to Struct
Go Package json

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 分布式 I/O 系统 BL200 Modbus TCP 耦合器
  • 数据编织 Data Fabric:解决“数据孤岛”的新思路
  • nginx的docker-compose文件
  • 《Unity3D高级编程 主程手记》第二章 C#技术要点(八) 业务逻辑优化技巧
  • 【C#】计算两条直线的交点坐标
  • 升级TrinityCore 服务器硬件
  • 内网隧道——隧道技术基础
  • Qt Creator:C++与Python混合编程
  • (21)起落架/可伸缩相机支架
  • C语言:进程间通信
  • Linux(openwrt)下iptables+tc工具实现网络流量限速控制(QoS)
  • 基于面向对象和递归的拦截器设计模式
  • 1.24、定义浅层神经网络架构和算法(matlab)
  • Android11 framework 禁止三方应用开机自启动
  • 正则表达式在Python中的高级应用:从HTML中提取数据
  • ----------
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • exif信息对照
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • PAT A1017 优先队列
  • python学习笔记-类对象的信息
  • Python学习之路13-记分
  • SpiderData 2019年2月16日 DApp数据排行榜
  • 彻底搞懂浏览器Event-loop
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 前端_面试
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 驱动程序原理
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 字符串匹配基础上
  • ​linux启动进程的方式
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #stm32整理(一)flash读写
  • (12)Hive调优——count distinct去重优化
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (二)斐波那契Fabonacci函数
  • (二)原生js案例之数码时钟计时
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (接上一篇)前端弄一个变量实现点击次数在前端页面实时更新
  • (三分钟了解debug)SLAM研究方向-Debug总结
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)visual stdio 书签功能介绍
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .cfg\.dat\.mak(持续补充)
  • .net oracle 连接超时_Mysql连接数据库异常汇总【必收藏】
  • .net Signalr 使用笔记
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET业务框架的构建
  • @NoArgsConstructor和@AllArgsConstructor,@Builder