2013-05-21 31 views
26

Tôi đang cố gắng để cấu hình chương trình Go của tôi bằng cách tạo ra một tập tin JSON và phân tích nó thành một cấu trúc:How Do I Phân tích một tệp JSON thành một cấu trúc với Go

var settings struct { 
    serverMode bool 
    sourceDir string 
    targetDir string 
} 

func main() { 

    // then config file settings 

    configFile, err := os.Open("config.json") 
    if err != nil { 
     printError("opening config file", err.Error()) 
    } 

    jsonParser := json.NewDecoder(configFile) 
    if err = jsonParser.Decode(&settings); err != nil { 
     printError("parsing config file", err.Error()) 
    } 

    fmt.Printf("%v %s %s", settings.serverMode, settings.sourceDir, settings.targetDir) 
    return 
} 

File config.json:

{ 
    "serverMode": true, 
    "sourceDir": ".", 
    "targetDir": "." 
} 

Chương trình biên dịch và chạy mà không cần bất kỳ lỗi nào, nhưng kết quả đầu ra tuyên bố in:

false 

(sai và hai chuỗi rỗng s)

Tôi cũng đã thử với json.Unmarshal(..) nhưng có cùng kết quả.

Làm cách nào để phân tích cú pháp JSON theo cách lấp đầy các giá trị struct?

+2

Đừng quên đóng tệp. Ví dụ: 'defer configFile.Close()' sau 'configFile, err: = os.Open (" config.json ")' – Kiril

Trả lời

33

Bạn không xuất các thành phần cấu trúc của mình. Tất cả đều bắt đầu bằng một chữ thường.

var settings struct { 
    ServerMode bool `json:"serverMode"` 
    SourceDir string `json:"sourceDir"` 
    TargetDir string `json:"targetDir"` 
} 

Làm chữ cái đầu tiên của phần tử trên của bạn để viết chúng. Bộ mã hóa/giải mã JSON sẽ không sử dụng các phần tử cấu trúc không được xuất.

+1

Cần lưu ý rằng vì Go không thể kết hợp một phần tử trong cấu trúc với một phần tử trong từ điển json của bạn (vì ánh xạ đó được người dùng định nghĩa khá nhiều), bạn sẽ cần phải sử dụng các thẻ để báo cho Go biết phần tử nào trong từ điển json bạn muốn liên kết với phần tử struct tương ứng. – sabhiram

Các vấn đề liên quan