Tôi muốn phân tích JSON này (trong config/synch.conf):Không thể phân tích một json phức tạp trong golang
{
"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"
}
Với programm này:
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)
}
}
nào không hoạt động như mong đợi, như đầu ra là:
{ {{0 0 0 0 0} {0 0 0 0 0}} [] }
Dưới đây là ví dụ cùng một lúc play.golang.org
01.232.
Tôi không biết điều này có khả thi hay không, nhưng tôi muốn nhận giá trị của hàm json.Unmarshal
được lưu trữ trong giao diện [string] {} (hoặc đối tượng khác cho phép) nơi tôi có thể truy cập , ví dụ: giá trị của phần cuối của phút (10) như sau: parsedMap["exec_period"]["end"]["minute"]
, nhưng tôi không biết phần "Generic JSON withinterface {}" của JSON and Go tại golang.org
Thực sự, nó đơn giản sao ?! Cảm ơn bạn ANisus! –
Bây giờ, câu hỏi của tôi là, làm thế nào để truy cập vào giá trị của phút cuối của exec_period? 'parsedMap [" exec_period "] [" end "] [" minute "]' không hoạt động và trả lời 'hoạt động không hợp lệ: parsedMap [" exec_period "] (chỉ mục của kiểu jason)', với các chữ cái đầu được viết hoa hoặc không –
Để truy cập vào giá trị, sử dụng 'parsedMap.Exec_period.End.Minute'. Sạch hơn nhiều so với xác nhận loại giao diện! (như tôi đã thêm vào câu trả lời) – ANisus