go - What's the proper way to convert a json.RawMessage to a struct? -


मेरे पास यह struct

  प्रकार SyncInfo struct {लक्ष्य है स्ट्रिंग}   

अब मैं ElasticSearch से कुछ json डेटा पूछता हूं। स्रोत प्रकार का है json.RawMessage । मैं चाहता हूं कि मेरे स्रोत को मेरे SyncInfo पर मैप करना है, जिसके लिए मैंने चर mySyncInfo बनाया है।

मैंने सोचा भी यह कैसे करना है ... लेकिन यह अजीब लगता है मैं पहली बार मार्शलजसन () को [] बाइट प्राप्त करने के लिए कॉल करता हूं और फिर उसे json.Unmarshal () पर फ़ीड करता है < ] बाइट और मेरे स्ट्रक्चर के लिए एक सूचक।

यह ठीक काम करता है लेकिन ऐसा लगता है जैसे मैं अतिरिक्त हॉप कर रहा हूं क्या मुझे कुछ याद आ रही है या यह कि json.RawMessage से struct ?

  var mySyncInfo SyncInfo jsonStr से प्राप्त करने का इच्छित तरीका है, _: = Out.Hits.Hits [0]। स्रोत। मिर्सलजसन () json.Unmarshal (jsonStr, और mySyncInfo) fmt.Print (mySyncInfo.Target)    

जैसा कि कहा गया है, अंतर्निहित प्रकार json.RawMessage है [] बाइट , ताकि आप < json.Unmarshal के लिए डेटा पैरामीटर के रूप में json.RawMessage का उपयोग कर सकते हैं

हालांकि, आपकी समस्या यह है कि आपके पास है एक सूचक ( * json.RawMessage ) और एक मान नहीं है। आपको केवल यह करने के लिए dereference है:

  err: = json.Unmarshal (* out.Hits.Hits [0]। स्रोत, & mySyncInfo)   

काम के उदाहरण:

  पैकेज मुख्य आयात ("एन्कोडिंग / जेएसन" "एफएमटी") टाइप करें सिंकइनफ़ॉर्फ़ संरचना {लक्ष्य स्ट्रिंग} func main () {डेटा : = [] बाइट (`{" लक्ष्य ":" लोकलहोस्ट "}`) स्रोत: = (* json.RawMessage) (और डेटा) var mySyncInfo SyncInfo // नोटिफ़ाइंग तारांकन * त्रुटि: = json.Unmarshal (* स्रोत, & amp; mySyncInfo) अगर गलती! = शून्य <दहशत (गलती)} fmt.printf ("% + v \ n", mySyncInfo)}   

आउटपुट: <पूर्व> {लक्ष्य: स्थानीयहोस्ट}

खेल का मैदान:

Comments

Popular posts from this blog

Java - Error: no suitable method found for add(int, java.lang.String) -

java - JPA TypedQuery: Parameter value element did not match expected type -

c++ - static template member variable has internal linkage but is not defined -