2016-11-29 8 views
6

इस संरचना के जेसन फील्ड नाम पाने का तरीका क्या है?गोलांग में एक संरचना के जेसन फील्ड नाम कैसे प्राप्त करें?

type example struct { 
    Id   int `json:"id"` 
    CreatedAt string `json:"created_at"` 
    Tag   string `json:"tag"` 
    Text  string `json:"text"` 
    AuthorId int `json:"author_id"` 
} 

मैं इस समारोह के साथ क्षेत्रों मुद्रित करने के लिए प्रयास करें:

func (b example) PrintFields() { 
    val := reflect.ValueOf(b) 
    for i := 0; i < val.Type().NumField(); i++ { 
     fmt.Println(val.Type().Field(i).Name) 
    } 
} 
बेशक

मैं:

Id 
CreatedAt 
Tag 
Text 
AuthorId 

लेकिन मैं की तरह कुछ करना चाहते हैं:

id 
created_at 
tag 
text 
author_id 
+0

चेक है (यह टैग मूल्यों को प्राप्त करने के लिए एक उदाहरण) [क्या जाओ में टैग के लिए उपयोग (रों) कर रहे हैं?] प्रश्न/10858787/क्या-उपयोग-के-उपयोग-के-टैग-इन-गो/30889373 # 30889373) – icza

उत्तर

9

आप StructTag का उपयोग करते हैं टैग प्राप्त करने के लिए टाइप करें। प्रलेखन मैं जुड़ा हुआ उदाहरण, उन्हें ढूंढ निकालेंगे है, लेकिन अपने कोड की तरह

func (b example) PrintFields() { 
    val := reflect.ValueOf(b) 
    for i := 0; i < val.Type().NumField(); i++ { 
     fmt.Println(val.Type().Field(i).Tag.Get("json")) 
    } 
} 
+0

धन्यवाद! यह पूरी तरह से काम करता है! – lambher

2

उपयोग कुछ हो सकता है:

func (b example) PrintFields() { 
    val := reflect.ValueOf(b) 
    t := val.Type() 
    for i := 0; i < t.NumField(); i++ { 
     fmt.Println(t.Field(i).Tag.Get("json")) 
    } 
} 

playground.

4

करते हुए देखें इसके बजाय StructField के Name का उपयोग कर के, StructTag ऑब्जेक्ट प्राप्त करने के लिए आप Tag का उपयोग कर सकते हैं। देखें:

Get का उपयोग करना::

func (b example) PrintFields() { 
    val := reflect.ValueOf(b) 
    for i := 0; i < val.Type().NumField(); i++ { 
     // prints empty line if there is no json tag for the field 
     fmt.Println(val.Type().Field(i).Tag.Get("json")) 
    } 
} 

Lookup का उपयोग करना:

func (b example) PrintFields() { 
    val := reflect.ValueOf(b) 
    for i := 0; i < val.Type().NumField(); i++ { 
     // skips fields without json tag 
     if tag, ok := val.Type().Field(i).Tag.Lookup("json"); ok { 
      fmt.Println(tag) 
     } 
    } 
} 
1

नहीं https://golang.org/pkg/reflect/#StructTag

तो फिर तुम json टैग प्राप्त StructTag के Get या Lookup तरीकों का उपयोग कर सकते हैं Name आप की तलाश में हैं। (Http://stackoverflow.com/: क्या आप के लिए देख इस जवाब बाहर Tag

func (b example) PrintFields() { 
    val := reflect.ValueOf(b) 
    for i := 0; i < val.Type().NumField(); i++ { 
     fmt.Println(val.Type().Field(i).Tag.Get("json")) 
    } 
} 
संबंधित मुद्दे