English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
يملك Go دعمًا مدمجًا للترميز والفكاك بـ JSON. كما يدعم أنواع البيانات المخصصة.
يستخدم Marshal وظيفة لتحويل أنواع البيانات في go إلى نموذج JSON.
نحو Marshal وظيفة
"func Marshal(v interface{}) ([]byte, error)"
يعود Marshal بـ JSON الترميز لـ v.
تحويل القيم الحقيقية إلى قيم JSON الحقيقية. يتم تحويل الأعداد الصحيحة والكبيرة والصغيرة إلى أرقام JSON. يجب أن يكون نوع مفتاح Map هو 字رة أو نوع صحيح أو يعتمد على encoding.TextMarshaler.
يتم解码 JSON باستخدام وظيفة Unmarshal.
نحو Unmarshal وظيفة
"func Unmarshal(data []byte, v interface{}) error"
ي解码 Unmarshal القيمة الم编码ة بـ JSON ويخزن النتيجة في القيمة التي يشير إليها v. إذا كان v nil أو ليس مرجعًا، فإن Unmarshal يعود بـ InvalidUnmarshalError.
يمكننا أيضًا تخصيص الحقول المخزنة في علامات التبويب "json" في الحقول في "struct". يمكننا استخدام اسم هذا الحقل، ثم قائمة الخيارات المفصولة بالكومياس.
Field int 'json:"myName"' // يعرض في JSON كمفتاح "myName" Field int 'json:"myName,omitempty?'//إذا كان قيمة هذا الحقل فارغة، يتم استبعاد هذا الحقل من العنصر Field int 'json:"-"' // الحقل يتم تجاهله بهذا المجلد.
package main import "encoding/json" import "fmt" func main() { bolType, _ := json.Marshal(false) // قيمة الحقيقة أو الزائفة fmt.Println(string(bolType)) intType, _ := json.Marshal(10) // قيمة العدد الصحيح fmt.Println(string(intType)) fltType, _ := json.Marshal(3.14) // قيمة النقاط العشرية fmt.Println(string(fltType)) strType, _ := json.Marshal("w3codebox") // قيمة النص fmt.Println(string(strType)) slcA := []string{"sun", "moon", "star"} // قيمة الحزمة slcB, _ := json.Marshal(slcA) fmt.Println(string(slcB)) mapA := map[string]int{"sun": 1, "moon": 2} // قيمة map mapB, _ := json.Marshal(mapA) fmt.Println(string(mapB)) }
الإخراج:
false 10 3.14 "w3codebox" ["sun","moon","star"] {"moon":2,"sun":1}
package main import ( "encoding/json" "fmt" "os" ) type Response1 struct { Position int Planet []string } type Response2 struct { Position int 'json:"position"' Planet []string 'json:"planet"' } func main() { res1A := &Response1{ Position: 1, Planet: []string{"mercury", "venus", "earth"}} res1B, _ := json.Marshal(res1A) fmt.Println(string(res1B)) res2D := &Response2{ Position: 1, Planet: []string{"mercury", "venus", "earth"}} res2B, _ := json.Marshal(res2D) fmt.Println(string(res2B)) byt := []byte('{"pi":6.13,"place":["New York","New Delhi"]}`) var dat map[string]interface{} if err := json.Unmarshal(byt, &dat); err != nil { panic(err) } fmt.Println(dat) num := dat["pi"].(float64) fmt.Println(num) strs := dat["place"].([]interface{}) str1 := strs[0].(string) fmt.Println(str1) str := `{"Position": 1, "Planet": ["mercury", "venus"]}` res := Response2{} json.Unmarshal([]byte(str), &res) fmt.Println(res) fmt.Println(res.Planet[1]) enc := json.NewEncoder(os.Stdout) d := map[string]string{"1":"mercury" , "2": "venus"} enc.Encode(d) }
الإخراج:
{"Position":1,"Planet":["mercury","venus","earth"]} {"position":1,"planet":["mercury","venus","earth"]} خريطة[pi:6.13 مكان:[نيويورك نيودلهي]] 6.13 نيويورك {1 [العدن الزهرة]} العدن {"1":"mercury","2":"venus"}