نحوه استفاده از JSON

توسط mrbardia72
زمان خواندن ~1 دقیقه
نحوه استفاده از JSON

✅نحوه استفاده از JSON با Go

❌در ادامه آموزش خواهیم داد

Default types🔴

Encode (marshal) struct to JSON🔴

Pretty print🔴

Decode (unmarshal) JSON to struct🔴

Arbitrary objects and arrays🔴

➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖➖

🔴Default types

🔵انواع پیش فرض  برای رمزگشایی و رمزگذاری در  JSON عبارتند:

bool for JSON booleans🟢

float64 for JSON numbers🟢

string for JSON strings, and🟢

nil for JSON null🟢

🔵علاوه بر این ، time.Time و انواع عددی موجود در بسته math / big را می توان بصورت خودکار به رشته های JSON کدگذاری کرد.

🔵توجه داشته باشید که JSON از انواع صحیح پشتیبانی نمی کند. آنها را اغلب می توان با اعداد نقطه شناور floating-point numbers. تقریب زد.

🔴 Encode (marshal) struct to JSON

type FruitBasket struct {
    Name    string
    Fruit   []string
    Id      int64  `json:"ref"`
    private string // An unexported field is not encoded.
    Created time.Time
}

basket := FruitBasket{
    Name:    "Standard",
    Fruit:   []string{"Apple", "Banana", "Orange"},
    Id:      999,
    private: "Second-rate",
    Created: time.Now(),
}

var jsonData []byte
jsonData, err := json.Marshal(basket)
if err != nil {
    log.Println(err)
}
fmt.Println(string(jsonData))
Output:
{"Name":"Standard","Fruit":["Apple","Banana","Orange"],"ref":999,"Created":"2018-04-09"}

🔵 خوب این کد یه نمونه ساده از decode کردن json  هست نمونه کد فوق خیلی واضح هست

🔵ما اومدیم یه استراکچر تغریف کردیم 

🔵توی خط ۹ تا ۱۵ اومدیم بهش مقدار دادیم

🔵اگه دقت کنید توی خط ۴ ما اومدیم یه تگ بهش ادیم این تگ توی خروجی واسه ما نمایش داده میشه بعنی بجای id به ما ref رو نشون میده

🔵و توی خط ۵ ما اومدیم فیلد رو با حروف کوچیک نوشتم که دفت کنید توی دیکد کردن اون فیلد رو نادیده میگیره

🔴Pretty print

jsonData, err := json.MarshalIndent(basket, "", "    ")
Output:

{
    "Name": "Standard",
    "Fruit": [
        "Apple",
        "Banana",
        "Orange"
    ],
    "ref": 999,
    "Created": "2018-04-09T23:00:00Z"
}

 🔵برای اینکه خروجی رو بهتر بتونیم نشون  بدیم توی خروجی از متد MarshalIndent استفاده می کنیم

🔴Decode (unmarshal) JSON to struct

type FruitBasket struct {
    Name    string
    Fruit   []string
    Id      int64 `json:"ref"`
    Created time.Time
}

jsonData := []byte(`
{
    "Name": "Standard",
    "Fruit": [
        "Apple",
        "Banana",
        "Orange"
    ],
    "ref": 999,
    "Created": "2018-04-09T23:00:00Z"
}`)

var basket FruitBasket
err := json.Unmarshal(jsonData, &basket)
if err != nil {
    log.Println(err)
}
fmt.Println(basket.Name, basket.Fruit, basket.Id)
fmt.Println(basket.Created)
Output:

Standard [Apple Banana Orange] 999
2018-04-09 23:00:00 +0000 UTC

🔵 برای اینکه بخوایم jsonخود را decodeکنیم و توی خروجی نمایش بدیم یه سری از عناصر داخل فرم json رو مطابق کد فوق از تابع Unmarshal توی خط ۲۱ استفاده می کنیم

🔴Arbitrary objects and arrays

jsonData := []byte(`{"Name":"Eve","Age":6,"Parents":["Alice","Bob"]}`)

var v interface{}
json.Unmarshal(jsonData, &v)
data := v.(map[string]interface{})

for k, v := range data {
    switch v := v.(type) {
    case string:
        fmt.Println(k, v, "(string)")
    case float64:
        fmt.Println(k, v, "(float64)")
    case []interface{}:
        fmt.Println(k, "(array):")
        for i, u := range v {
            fmt.Println("    ", i, u)
        }
    default:
        fmt.Println(k, v, "(unknown)")
    }
}
Output:

Name Eve (string)
Age 6 (float64)
Parents (array):
     0 Alice
     1 Bob

🔵 کد فوق را در نظر بگیرید ما میخوایم توی خروجی type  هر value رو بدونیم چیه