2013-11-22 14 views
5

Tôi có một tệp json mẫu mà được cấu trúc như thế nàyMarshall và UnMarshall JSON Nội dung trong GoLang

{ 
    "method":"brute_force", 
    "bc":"select * from blah;", 
    "gc":[ 
    "select sum(year) from blah;", 
    "select count(*) from table;" 
     ] 
} 

Tôi cố gắng để viết một chương trình đi mà có thể đọc tập tin này và hoạt động của nội dung json.

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


type Response2 struct { 
    method string 
    bc string 
    gc []string 
} 

func main() { 
    file,_ := ioutil.ReadFile("config.json") 
    fmt.Printf("%s",string(file)) 

     res := &Response2{} 


     json.Unmarshal([]byte(string(file)), &res) 
     fmt.Println(res) 

     fmt.Println(res.method) 
     fmt.Println(res.gc) 

} 

res.method và res.gc không in bất cứ thứ gì. Tôi không biết chuyện gì đang xảy ra.

Trả lời

7
type Response2 struct { 
    method string 
    bc string 
    gc []string 
} 

Tên của các trường Phải là chữ hoa nếu không mô-đun Json không thể truy cập chúng (chúng riêng tư với mô-đun của bạn). Bạn có thể sử dụng thẻ json để chỉ định kết quả khớp giữa Trường và tên

type Response2 struct { 
    Method string `json:"method"` 
    Bc string `json:"bc"` 
    Gc []string `json:"gc"` 
} 
+0

cảm ơn một tấn. Tôi dint biết điều này trước đây. Nhưng nó chỉ là lạ, trình biên dịch đi cho phép sai lầm như vậy đi qua âm thầm. – Rahul

+0

@Rahul không phải là lỗi biên dịch. Cú pháp là đúng. Là một ngữ nghĩa và trình biên dịch không thể làm nhiều về nó. (ps. xin vui lòng chấp nhận câu trả lời :)) – fabrizioM

+0

Như một noobie đi này là đáng ngạc nhiên hữu ích. Tôi so khớp các tên biến với json chữ thường. Không có lỗi nhưng không có giá trị trong unmarshal/giải mã. Uppercasing nó cố định nó! :) –

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