gpt4 book ai didi

json - 无法在golang中解析复杂的json

转载 作者:IT王子 更新时间:2023-10-29 01:17:01 24 4
gpt4 key购买 nike

我想解析这个 JSON(在 config/synch.conf 中):

{
"period" :"yy",
"exec_period" :
{
"start" : {
"month" : 1,
"week" : 2,
"day" : 3,
"hour" : 4,
"minute" : 5
},
"end" : {
"month" : 6,
"week" : 7,
"day" : 8,
"hour" : 9,
"minute" : 10
}
},
"backup" : [
{
"local_dir" : "directoryLo1",
"server_dir" : "directoryLo2",
"server_host" : "domaineName"
},
{
"local_dir" : "directoryLo1",
"server_dir" : "directorySe2",
"server_host" : "domaineName"
}
],
"incremental_save" : "1Y2M"
}

有了这个程序:

package main

import (
"encoding/json"
"fmt"
"io/ioutil"
)

func main() {
content, err := ioutil.ReadFile("config/synch.conf")
if err == nil {

type date struct{
month float64
week float64
day float64
hour float64
minute float64
}

type period struct{
start date
end date
}

type backupType []struct{
local_dir string
server_dir string
server_host string
}

type jason struct{
period string
exec_period period
backup backupType
incremental_save string
}

var parsedMap jason

err := json.Unmarshal(content, &parsedMap)

if err!= nil {
fmt.Println(err)
}

fmt.Println(parsedMap)
} else {
panic(err)
}

}

这没有按预期工作,因为输出是:

{ {{0 0 0 0 0} {0 0 0 0 0}} [] }

这是 play.golang.org 上的相同示例
http://play.golang.org/p/XoMJIDIV59

我不知道 go 是否可行,但我想获取存储在 map[string]interface{}(或另一个对象)中的 json.Unmarshal 函数的值允许)我可以访问的地方,例如,像这样的分钟结束值(10):parsedMap["exec_period"]["end"]["minute"],但我不不理解 JSON and Go 的“通用 JSON withinterface{}”部分在 golang.org

最佳答案

您的代码很好,除了 json 包只能处理导出的字段。

如果您将每个字段名称的第一个字母大写,一切都会起作用:

type date struct {
Month float64
Week float64
Day float64
Hour float64
Minute float64
}

type period struct {
Start date
End date
}

type backupType []struct {
Local_dir string
Server_dir string
Server_host string
}

type jason struct {
Period string
Exec_period period
Backup backupType
Incremental_save string
}

虽然可以编码到 map[string]interface{} 中,但如果数据具有集合结构(例如您问题中的那个),您的解决方案很可能更可取。使用 interface{} 需要类型断言,最终可能看起来很乱。您的示例如下所示:

parsedMap["exec_period"].(map[string]interface{})["end"].(map[string]interface{})["minute"].(float64)

关于json - 无法在golang中解析复杂的json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17209111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com