मैं एक नया गो प्रोग्रामर हूं (जावा से) और मैं एक सामान्य तरीके से पुन: पेश करना चाहूंगा जो जावा में उपयोग करने के लिए है।
मैं कुछ फ़ंक्शन बनाना चाहता हूं जो मुझे कोड डुप्लिकेट से बचने के लिए JSON स्ट्रिंग पर एक अनमरशाल करने की अनुमति देता है।
यह मेरा वर्तमान कोड है जो काम नहीं कर रहा है:
type myStruct1 struct {
id string
name string
}
func (obj myStruct1) toString() string {
var result bytes.Buffer
result.WriteString("id : ")
result.WriteString(obj.id)
result.WriteString("n")
result.WriteString("name : ")
result.WriteString(obj.name)
return result.String()
}
func main() {
content := `{id:"id1",name="myName"}`
object := myStruct1{}
parseJSON(content, object)
fmt.Println(object.toString())
}
func parseJSON(content string, object interface{}) {
var parsed interface{}
json.Unmarshal([]byte(content), &parsed)
}
यह कोड, रन पर, मुझे यह लौटाता है:
id :
name :
क्या तुम्हारे पास कोई विचार है ?
धन्यवाद
उत्तर:
जवाब के लिए 2 № 1मुद्दा यह है कि क्या आप सामान्य प्रकार से लिखना चाहते हैं? आप शायद एक स्ट्रिंग नक्शा चाहते हैं। यह BSON वैसे भी काम करता है:
var anyJson map[string]interface{}
json.Unmarshal(bytes, &anyJson)
आप "फ़ील्ड को इस तरह एक्सेस करने में सक्षम होंगे:
anyJson["id"].(string)
डॉन "अपने मूल्यों को मुखर करने के लिए भूल जाते हैं, और वे जरूर सही प्रकार हो या वे "घबराएँगे। (आप गोलंग साइट पर टाइप के बारे में अधिक पढ़ सकते हैं)"
जवाब के लिए 0 № 2
आपको अपने क्षेत्र निर्यात करने होंगे:
type myStruct1 struct {
Id string
Name string
}
देख निर्यात किए गए पहचानकर्ता प्रलेखन से।
जवाब के लिए 0 № 3
आपके कोड को काम करने के लिए इसमें कुछ बदलाव करने होंगे:
- कार्यक्रम
json.Unmarshal
केवल आपकी संरचना के अंदर चर सेट कर सकते हैं जो निर्यात किए जाते हैं, जो कि बड़े अक्षरों से शुरू होता है। जैसे कुछ का उपयोग करेंID
तथाName
अंदर अपने चर नामों के लिएmyStruct1
. - आपकी सामग्री अमान्य JSON है। आप वास्तव में क्या चाहते हैं
{"ID":"id1","Name":"myName"}
. - आप "गुजर रहे हैं
object
सेवा मेरेparseJSON
लेकिन आप "का उपयोग कर रहे हैंparsed
इसके बजाय, नहींobject
। बनानाparseJSON
एक मिला*myStruct
(के बजाय एinterface{}
), और इसके बजाय उस चर का उपयोग करेंparsed
जब स्ट्रिंग unmarshalling। इसके अलावा, हमेशा त्रुटि रिटर्न को संभालें, जैसेerr := json.Unmarshal(content, object)
, और जाँच करेंerr
.
मैं आपको ऐसा करने का सुझाव देता हूं गोलंग टूर ;)
जवाब के लिए 0 № 4
अनमरशाल केवल संरचना के निर्यात क्षेत्रों को निर्धारित करेगा।
इसका मतलब है कि आपको कैपिटल केस लेटर्स का उपयोग करने के लिए json स्ट्रक्चर को संशोधित करना होगा:
type myStruct1 struct {
Id string
Name string
}
इसके पीछे कारण यह है कि जब तक वे निर्यात नहीं किए जाते हैं, तब तक json लाइब्रेरी में रिफ्लेक्ट का उपयोग करके फ़ील्ड्स देखने की क्षमता नहीं होती है।