配置文件格式 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/48332.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据编织 Data Fabric:解决“数据孤岛”的新思路

一个不争的事实是,企业内部数据孤岛的形成,根因在于业务发展的复杂性与技术迭代的快速性导致。具体而言,随着企业业务快速增长,如新生产线的引入或外部公司的并购,这些活动往往伴随着新系统上线与独立数据体系的融入&a…

【safari】react在safari浏览器中,遇到异步时间差的问题,导致状态没有及时更新到state,引起传参错误。如何解决

在safari浏览器中,可能会遇到异步时间差的问题,导致状态没有及时更新到state,引起传参错误。 PS:由于useState是一个普通的函数, 定义为() > void;因此此处不能用await/async替代setTimeout,只能用在返…

网络安全行业最大的敌人是自己

在危机四伏的数字丛林时代,网络安全行业需要跳出资本和市场的博弈陷阱,通过拯救自己来拯救所有人。当然,政府和资本也应该意识到这一点。 在当今这个数字化时代,网络安全的重要性与日俱增。然而,尽管政府和企业不断强调…

【vue+el-table】实现表尾合计行分两行显示,一行显示勾选项之和,一行显示合计,已实现,具体思路解析

效果图: 思路解析: 首先进行了el-table列表的组件封装,很多参数是传进来的。如果是普通的列表,相关参数直接定义就行 1、使用el-table的summary-method处理表尾行 (1)定义summaryIndex用于指定合计在哪一列…

Linux下载网络文档

1. 使用wget 1.1 安装wget sudo apt install wget1.2 下载网页或者文件 wget URL1.3 下载并重命名 wget -O filename URL1.4 下载文件夹 wget -r ftp://server-address.com/directory1.5 下载整个网站 wget -m --convert-links --page-requisites website_address2. 使用…

vue学习笔记(十一)——开发心得(axios的封装、promise细节、vue-router开发中的使用)

1. axios的网络请求的封装 1.1 为什么要封装api? 代码分层,便于以后的修改,无需触碰逻辑页面 目标: 网络请求,不散落在各个逻辑页面里,封装起来方便以后修改 1.2 封装api步骤 ① 在项目 src 下新建目录 utlis &am…

浅谈大模型领域内数据微调的一些个人理解

近期由于连续做了两个大模型相关的项目尝试,发现一些现象,在查阅了多篇论文及圈内大佬的点评之后,个人对大模型领域内数据微调有了更深入的理解,今天简单交流下,个人的一些理解,欢迎资深大佬对其中的不足之…

Go的数据结构与实现【LinkedList】

介绍 所谓链表(Linked List),就是按线性次序排列的一组数据节点。每个节点都是一个对象,它通过一个引用指向对应的数据元素,同时还通过一个引用next指向下一节点。 实现 逻辑方法 我们定义链表的结构体&#xff1a…

VTD学习笔记(一)-启动vtd、基本界面和按钮

写在前面:真快啊,眨眼就毕业上班了,岗位也是做仿真,看来以后就是一直做仿真了,再见了定位~。公司使用的是vtd,看资料是一个很庞大的自动驾驶仿真软件,囊括了车辆动力学到传感器仿真,…

【WPF开发】上位机开发-串口收发

一、引言 在现代工业控制、嵌入式系统等领域,串口通信作为一种常见的通信方式,被广泛应用于各种场景。C#作为一门强大的编程语言,结合Windows Presentation Foundation(WPF)框架,可以轻松实现串口通信功能…

MMDet3d TR3D: RuntimeError: Error compiling objects for extension

项目: https://github.com/open-mmlab/mmdetection3d 问题复现: 步骤 运行python tools/test.py projects/TR3D/configs/tr3d_1xb16_scannet-3d-18class.py checkpoints/tr3d_1xb16_sunrgbd-3d-10class.pth后报错: File "/home/kyle…

vue2高级特性

1、vue父子组件如何通信 通过props和emit事件传递 // 父组件中<Child :data"data" dataChange"dataChangeHandle"></Child>...methods: {dataChangeHandle(data) {...do somthing} } // 子组件中export default {props: {data: {type: Objec…

C++ STL partition_copy 用法和实现

一&#xff1a;功能 对区间内的元素进行分组&#xff0c;将分组结果拷贝到给定序列中。 二&#xff1a;用法 #include <vector> #include <algorithm> #include <iostream>int main() {std::vector<int> data{2, 4, 6, 1, 3, 5};auto is_even [](in…

Python list comprehension (列表推导式 - 列表解析式 - 列表生成式)

Python list comprehension {列表推导式 - 列表解析式 - 列表生成式} 1. Python list comprehension (列表推导式 - 列表解析式 - 列表生成式)2. Example3. ExampleReferences Python 中的列表解析式并不是用来解决全新的问题&#xff0c;只是为解决已有问题提供新的语法。 列…

iPad型号数据解析:了解不同iPad型号的连接和扩展性能力

iPad是一款非常受欢迎的平板电脑&#xff0c;拥有多种型号和规格可供选择。在本篇文章中&#xff0c;我们将深入研究不同iPad型号的连接和扩展性能。数据源来自于挖数据平台&#xff0c;该平台提供了全面的iPad型号数据&#xff0c;共计1485个型号。 首先&#xff0c;让我们来…

【D3.js in Action 3 精译_020】2.6 用 D3 设置与修改元素样式 + 名人专访(Nadieh Bremer)+ 2.7 本章小结

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介&#xff08;已完结&#xff09; 1.1 何为 D3.js&#xff1f;1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践&#xff08;上&#xff09;1.3 数据可视化最佳实践&#xff08;下&#xff09;1.4 本章小结 第二章…

SpringBoot如何使用Kafka来优化接口请求的并发

在Spring Boot中使用 Kafka 来优化接口请求的并发&#xff0c;主要是通过将耗时的任务异步化到Kafka消息队列中来实现。这样&#xff0c;接口可以立即响应客户端&#xff0c;而不需要等待耗时任务完成。 在Spring Boot应用程序中调用Kafka通常涉及使用Spring Kafka库&#xff…

怎样用Java程序与数据库建立联系?

首先我们要了解一下JDBC&#xff0c;一个为Java程序与关系型数据库交互提供便利的API&#xff08;应用程序编程接口&#xff09;&#xff0c; 本期我们尝试用Java编程软件IDEA与MYSQL数据库建立联系。 首先我们在IDEA中穿件一个&#xff08;SQL&#xff09;&#xff0c;然后导…

系统编程--Linux下文件其他操作

这里写目录标题 文件存储理论补充dentry、inode 文件其他操作stat函数作用函数原型代码&#xff08;以获取文件大小为例&#xff09;补充&#xff08;获取文件类型&#xff09; lstat函数作用函数原型代码补充&#xff08;获取文件权限&#xff09;总结 tipslink函数作用简介函…

畅玩游戏新选择 :游戏本 Windows10 64位 专业版!

对于喜欢游戏竞技的玩家而言&#xff0c;选择一款合适的操作系统对于提升游戏体验至关重要。为了满足这一需求&#xff0c;系统之家小编将带来高性能的游戏本专用Win10操作系统。这一版本系统不仅注重游戏的稳定性&#xff0c;还针对玩家在游戏中可能遇到的超时检测和恢复&…