2013-04-15 8 views
5

निम्नलिखित कोड unmarshal "आईडी" है, लेकिन "होस्टनाम" नहीं है। क्यूं कर? मैं अब काफी समय से इस पर घूर रहा हूं कि अगर यह एक टाइपो है तो मुझे पता है कि मैं इसे कभी नहीं खोजूंगा। कृपया मदद करें। (http://play.golang.org/p/DIRa2MvvAV)एन्कोडिंग/जेसन unmarshal एक क्षेत्र गुम है

package main 

import (
    "encoding/json" 
    "fmt" 
) 

type jsonStatus struct { 
    Hostname string `json:host` 
    Id  string `json:id` 
} 

func main() { 
    msg := []byte(`{"host":"Host","id":"Identifier"}`) 

    status := new(jsonStatus) 

    err := json.Unmarshal(msg, &status) 
    if err != nil { 
     fmt.Println("Unmarshall err", err) 
    } 
    fmt.Printf("Got status: %#v\n", status) 
} 

उत्पादन मैं

Got status: &main.jsonStatus{Hostname:"", Id:"Identifier"} 

मैं कहाँ उम्मीद

Got status: &main.jsonStatus{Hostname:"Host", Id:"Identifier"} 

उत्तर

7

आपका क्षेत्र टैग गलत हो रहा है। उन्हें वैकल्पिक नाम के चारों ओर उद्धरण की आवश्यकता है।

type jsonStatus struct { 
    //--------------------v----v 
    Hostname string `json:"host"` 
    Id  string `json:"id"` 
} 

तकनीकी तौर पर, आप Id क्षेत्र के लिए एक टैग बिल्कुल जरूरत नहीं है। यही कारण है कि वह क्षेत्र काम कर रहा था।

डेमो:http://play.golang.org/p/tiop27jNJe

+0

रवींद्र, मैं विश्वास नहीं कर सकता मुझे लगता है कि याद किया। मुझे यह भी एहसास नहीं हुआ कि अनचाहे होने पर महत्वपूर्ण नाम केस संवेदनशील नहीं हैं। धन्यवाद! –

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