配置文件格式 JSON 快速上手

文章目录

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

1.语法

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

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

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

json 复制代码
"firstName" : "John"

一个合法的 JSON 可以是:

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

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

json 复制代码
{ "firstName":"John" , "lastName":"Doe" }

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

json 复制代码
{
"employees": [
	{ "firstName":"John" , "lastName":"Doe" },
	{ "firstName":"Anna" , "lastName":"Smith" },
	{ "firstName":"Peter" , "lastName":"Jones" }
]
}

2.实例

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

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。

go 复制代码
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 串表示的配置信息。

go 复制代码
package main

import(
        "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

相关推荐
weixin_4407305010 小时前
内置函数、json文本、pickle二进制
开发语言·python·json
念越12 小时前
接口自动化测试从入门到实战:接口用例设计、Requests、Pytest、YAML、JSON Schema 与 Allure 报告
python·测试工具·自动化·json·pytest
福兮说2 天前
前后端算的 MD5、SHA-256 对不上?编码、换行、BOM、HMAC、JSON 顺序,八个原因逐个实测
前端·javascript·node.js·json·哈希算法
网络毒刘2 天前
MCP 从 0 接入 Cursor:mcp.json 安装配置到最小调用与常见报错
json
小小龙学IT2 天前
Go 语言 encoding/json 标准库深度解析:从 Tag 反射到流式处理
golang·json
李游Leo3 天前
HarmonyOS 7 + Node.js-JSON Schema:审核测试路径与版本事实的一致性门禁【鸿蒙心迹】
node.js·json·harmonyos
ha_lydms4 天前
MaxCompute中JSON函数
大数据·数据库·阿里云·json·dataworks·maxcompute·odps
LeoCrawls4 天前
Python 读取 JSON 常见报错排查,附完整处理函数
python·json·php
星河耀银海5 天前
数据解析:AI返回JSON数据在HTML5中的渲染方法
人工智能·json·html5
三8445 天前
Fastjson 漏洞 · 01 · 认识 Fastjson 与序列化基础
json·fastjson·反序列化