前言
使用環境:
IDE:Golang 2020.2.3
Go:go 1.15.3
1.json檔案描述
這是從我處理的json檔案中截取的第一個小塊,也是我決議時用來測驗的一小塊:
{
"os_id": "LG01",
"os": "linux",
"cmd_info": [{
"cmd_category_id": "LG0101",
"cmd_category": "軟體/列印/開發/工具",
"cmd_list": [{
"cmd_sub_category_id": "LG010101",
"cmd_sub_category": "Shell內建命令",
"cmd_sub_list": [{
"cmd_id": "LG010101001",
"cmd_name": "pstree",
"cmd_desc": "pstree將所有行程以樹狀圖顯示,樹狀圖將會以 pid (如果有指定) 或是以 init 這個基本行程為根 (root),如果有指定使用者 id,則樹狀圖會只顯示該使用者所擁有的行程,",
"cmd_syntax": "pstree [引數]",
"cmd_parameters": [{
"cmd_parameter_key": "-a",
"cmd_parameter_value": "顯示每個程式的完整指令,包含路徑,引數或是常駐服務的標示,"
},
{
"cmd_parameter_key": "-c",
"cmd_parameter_value": "不使用精簡標示法,"
},
{
"cmd_parameter_key": "-G",
"cmd_parameter_value": "使用VT100終端機的列繪圖字符,"
},
{
"cmd_parameter_key": "-h",
"cmd_parameter_value": "列出樹狀圖時,特別標明現在執行的程式,"
}
],
"cmd_examples": "pstree -p",
"cmd_os": "linux",
"cmd_type": "1"
}]
}]
}]
}
2.抽出可以在Golang中使用的結構
陣列結構的地方我都用的陣列進行對應,別的地方用的都是字串型別:
type Cmd struct {
Os_id string `json:"os_id"`
Os string `json:"os"`
Cmd_info []Cmd_info `json:"cmd_info"`
}
type Cmd_info struct {
Cmd_category_id string `json:"cmd_category_id"`
Cmd_category string `json:"cmd_category"`
Cmd_list []Cmd_list `json:"cmd_list"`
}
type Cmd_list struct {
Cmd_sub_category_id string `json:"cmd_sub_category_id"`
Cmd_sub_category string `json:"cmd_sub_category"`
Cmd_sub_list []Cmd_sub_list `json:"cmd_sub_list"`
}
type Cmd_sub_list struct {
Cmd_id string `json:"cmd_id"`
Cmd_name string `json:"cmd_name"`
Cmd_desc string `json:"cmd_desc"`
Cmd_syntax string `json:"cmd_syntax"`
Cmd_parameters []Cmd_parameters `json:"cmd_parameters"`
Cmd_examples string `json:"cmd_examples"`
Cmd_os string `json:"cmd_os"`
Cmd_type string `json:"cmd_type"`
}
type Cmd_parameters struct {
Cmd_parameter_key string `json:"cmd_parameter_key"`
Cmd_parameter_value string `json:"cmd_parameter_value"`
}
此處推薦一個網站,可以直接將json反序列化為struct:https://app.quicktype.io/,這樣就無需手動創建了,
3.獲取json檔案路徑
我將這個linux_cmd.json放在D:\amf\db\linux_cmd.json中,如圖所示:

此時需要代碼獲取這個檔案的路徑:
func file_get_contents(path string) ([]byte, error) {
f, err := os.Open(path)
if err != nil {
return nil, err
}
return ioutil.ReadAll(f)
}
4.main函式呼叫
func main() {
var c Cmd
var content []byte
var err error
//注意在寫路徑的時候需要加兩個反斜杠
content, err = file_get_contents("D:\\amf\\db\\linux_cmd.json")
if err != nil {
fmt.Println("open file error: " + err.Error())
return
}
err = json.Unmarshal([]byte(content), &c)
if err != nil {
fmt.Println("ERROR: ", err.Error())
return
}
fmt.Println(c)
}
至此,使用Golang決議json檔案的程序就結束了,控制臺會輸出相應的內容,我的實驗輸出結果如下:

如果想要讓輸出的方式改變的話,可以在上述代碼中更改即可,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/225405.html
標籤:區塊鏈
上一篇:《金融學》階段性回顧筆記(上篇)
