GoLang

2013-11-22 12 views
5

में मार्शल और UnMarshall JSON सामग्री मैं एक नमूना json फ़ाइल जो इसGoLang

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

मैं एक जाना प्रोग्राम है जो इस फ़ाइल को पढ़ने के लिए और 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 और res.gc कुछ भी प्रिंट न करें। मुझे क्या पता चल रहा है पर कोई जानकारी नहीं है।

उत्तर

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

फ़ील्ड का नाम अपरकेस होना चाहिए अन्यथा जेसन मॉड्यूल उन्हें एक्सेस नहीं कर सकता है (वे आपके मॉड्यूल के लिए निजी हैं)। आप फ़ील्ड और नाम

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

के बीच एक मैच निर्दिष्ट करने के लिए जेसन टैग का उपयोग कर सकते हैं। मैं इससे पहले जानता हूँ। लेकिन यह सिर्फ अजीब बात है कि, जाओ कंपाइलर इस तरह की गलती चुपचाप से गुजरने देता है। – Rahul

+0

@Rahul संकलन त्रुटि नहीं है। वाक्यविन्यास सही है। एक अर्थपूर्ण एक है और संकलक इसके बारे में ज्यादा कुछ नहीं कर सकता है। (पीएस। कृपया उत्तर स्वीकार करें :)) – fabrizioM

+0

एक जाने के रूप में यह आश्चर्यजनक रूप से सहायक था। मैंने वेरिएबल नामों को लोअरकेस जेसन से मेल किया। कोई त्रुटि नहीं, लेकिन unmarshal/decode में कोई मान नहीं है। इसे अपरकेसिंग ने इसे ठीक किया! :) –

 संबंधित मुद्दे