2014-10-22 14 views
10

में एक विशिष्ट struct में unmarshal JSON डेटा मैं Golang में निम्नलिखित JSON डेटा unmarshal हैं:जाओ

b := []byte(`{"Asks": [[21, 1], [22, 1]] ,"Bids": [[20, 1], [19, 1]]}`) 

मुझे पता है कि कैसे करना है, मैं इस तरह की एक struct को परिभाषित:

type Message struct { 
    Asks [][]float64 `json:"Bids"` 
    Bids [][]float64 `json:"Asks"` 
} 

मुझे नहीं पता कि को थोड़ा और अधिक करने का एक आसान तरीका है या नहीं।

type Message struct { 
    Asks []Order `json:"Bids"` 
    Bids []Order `json:"Asks"` 
} 

type Order struct { 
    Price float64 
    Volume float64 
} 

ताकि मैं इसे बाद में इस तरह unmarshaling के बाद का उपयोग कर सकते हैं:: मैं इस तरह के प्रारूप में unmarshaling के बाद डेटा करना चाहते हैं

m := new(Message) 
err := json.Unmarshal(b, &m) 
fmt.Println(m.Asks[0].Price) 

मैं सच में पता नहीं कैसे GO में आसान या idiomatically ऐसा करने के लिए तो मुझे आशा है कि इसके लिए एक अच्छा समाधान है।

+0

संभवतः संबंधित:

आप इस उदाहरण यहाँ के साथ चारों ओर खेल सकते हैं http://stackoverflow.com/questions/21268000/unmarshaling-nested-json-objects-in-golang – rogerdpack

उत्तर

12

आप संरचना पर json.Unmarshaler interface लागू करके इसे कर सकते हैं। कुछ इस तरह करना चाहिए:

func (o *Order) UnmarshalJSON(data []byte) error { 
    var v [2]float64 
    if err := json.Unmarshal(data, &v); err != nil { 
     return err 
    } 
    o.Price = v[0] 
    o.Volume = v[1] 
    return nil 
} 

यह मूलतः का कहना है कि Order प्रकार एक 2 तत्व के बजाय डिफ़ॉल्ट प्रतिनिधित्व तैरता की सरणी एक struct (एक वस्तु) के लिए से डीकोड किया जाना चाहिए। http://play.golang.org/p/B35Of8H1e6

+0

आपकी मदद के लिए धन्यवाद, यह ठीक वही है जिसकी मुझे तलाश थी। – ungchy