2014-12-28 9 views
8

मैं जेएसओएन में एक नेस्टेड संरचना कैसे मार्शल कर सकता हूं? मुझे पता है कि किसी भी नेस्टेड structs के बिना संरचना मार्शल कैसे करें। हालांकि जब मैं JSON प्रतिक्रिया को इस तरह दिखने की कोशिश करता हूं:मार्शल नेस्टेड structs JSON

{"genre": {"country": "taylor swift", "rock": "aimee"}} 

मैं समस्याओं में भाग लेता हूं।

मेरे कोड इस तरह दिखता है:

जाओ:

type Music struct { 
    Genre struct { 
    Country string 
    Rock string 
    } 
} 

resp := Music{ 
    Genre: { // error on this line. 
    Country: "Taylor Swift", 
    Rock: "Aimee", 
    }, 
} 

js, _ := json.Marshal(resp) 
w.Write(js) 

हालांकि, मैं त्रुटि

Missing type in composite literal

मिल मैं इस को हल करते हैं?

उत्तर

13

यहाँ अपने प्रकार के लिए समग्र शाब्दिक है:

resp := Music{ 
    Genre: struct { 
     Country string 
     Rock string 
    }{ 
     Country: "Taylor Swift", 
     Rock: "Aimee", 
    }, 
} 

playground example

आप शाब्दिक में गुमनाम प्रकार को दोहराना होगा। पुनरावृत्ति से बचने के लिए, मैं शैली के लिए एक प्रकार को परिभाषित करने की सलाह देता हूं। साथ ही, आउटपुट में लोअरकेस कुंजी नाम निर्दिष्ट करने के लिए फ़ील्ड टैग का उपयोग करें।

type Genre struct { 
    Country string `json:"country"` 
    Rock string `json:"rock"` 
} 

type Music struct { 
    Genre Genre `json:"genre"` 
} 

resp := Music{ 
    Genre{ 
     Country: "Taylor Swift", 
     Rock: "Aimee", 
    }, 
} 

playground example

+0

धन्यवाद! पहला उदाहरण काम नहीं करता था हालांकि – user3918985

1

उपयोग JsonUtils। यह एक प्रोग्राम है जो एक जेएसएस फ़ाइल से गो स्ट्रक्चर उत्पन्न करता है:
https://github.com/bashtian/jsonutils

1

क्यों संरचना मूल्यों के लिए जेसन परम सेट नहीं किया गया है? https://play.golang.org/p/n6aJdQgfom

+0

आपके गो प्लेग्राउंड उदाहरण में, क्या आप कुछ टिप्पणियों में भी जोड़ सकते हैं? – Pred

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