JSON (JavaScript Object Notation) هو تنسيق بيانات متعدد الاستخدامات وشائع على نطاق واسع. غالبًا ما يتم استخدامه للتواصل بين تطبيقات الويب وأيضًا كطريقة ملائمة لتخزين كميات كبيرة من بيانات التطبيقات المنظمة.

تعد JSON مفيدة جدًا لدرجة أن جميع لغات البرمجة الحديثة تقريبًا توفر دعمًا مدمجًا للعمل معها ، بما في ذلك Go.

العمل مع JSON في Go

يمكنك تقسيم معظم العمل الذي ستنجزه باستخدام JSON إلى فئتين عامتين: التنظيم وإلغاء التنظيم. ويكيبيديا يعرّف التنظيم على أنه:

في علوم الكمبيوتر ، التنظيم هو عملية تحويل تمثيل الذاكرة لكائن ما إلى تنسيق بيانات مناسب للتخزين أو النقل. يتم استخدامه عادةً عندما يجب نقل البيانات بين أجزاء مختلفة من برنامج الكمبيوتر أو من برنامج إلى آخر.

بعبارات أبسط ، التنظيم هو عملية تحويل البيانات المخزنة في متغير إلى نموذج يسهل تمريره إلى برنامج آخر. Unmarshaling هي العملية العكسية: فهي تتضمن أخذ البيانات المنسقة للنقل وتحويلها إلى نموذج يسهل على برنامجك استخدامه.

باستخدام Go ، يمكنك تنظيم هياكل البيانات الأصلية في JSON. ويمكنك تنفيذ الإجراء العكسي ، وإلغاء تنظيم بيانات JSON في متغيرات Go.

instagram viewer

مارشال إلى JSON في Go

يوفر Go ملف حزمة ترميز / json لتسهيل العمل مع JSON. تحتوي هذه الحزمة على العديد من الوظائف ، ولكن الوظيفة التي ستستخدمها للتنظيم هي ملف مارشال وظيفة. مارشال لديه توقيع الوظيفة التالية:

func Marshal (v واجهه المستخدم{}) ([] بايت ، خطأ)

هذا يعني ذاك مارشال يقبل معلمة من أي نوع بيانات ، ويُرجع قيمتين: شريحة بايت ، وخطأ. بعبارة أخرى ، أنت تتصل مارشال بقيمة Go ، وتحولها إلى JSON وترجع مكافئ JSON. إذا واجه خطأ أثناء عملية التحويل ، فسيعيد الخطأ وشريحة فارغة.

إليك مثال على رمز يستخدم مارشال لتحويل الخريطة إلى JSON. لتشغيل هذا المثال ، كل ما تحتاجه هو إنشاء ملف Go بتنسيق محرر الكود المفضل لديك، أو استخدم اذهب إلى الملعب:

طَرد رئيسي

يستورد (
"ترميز / json"
"FMT"
)

func رئيسي(){
val: = خريطة [سلسلة]int{
"جون": 25,
"ماري": 19,
"آدم": 5,
}

الدقة ، _: = json. مارشال (فال)
FMT.Println(خيط(الدقة))
}

إذا قمت بتشغيل هذا الرمز ، فسيتم إخراج ما يلي:

كما ذكرنا سابقًا ، يمكنك تنظيم أي نوع من بيانات Go إلى JSON ، على الرغم من أنك في الحياة الواقعية عادةً ما تقوم بتنظيم الهياكل. لهذا السبب ، يوفر Go ميزة تسمى علامات البنية للسماح لك بتقديمها مارشال تعليمات إضافية لتحويل الهياكل الخاصة بك.

علامة الهيكل هي سلسلة تقوم بتضمينها في تصريح البنية الخاص بك بجوار نوع بيانات الحقل. تتيح لك علامات الهيكل ضبط الطريقة مارشال يعامل الحقل الذي تنتمي إليه العلامة. يمكنك استخدام علامات الهيكل لإعادة تسمية حقل في إخراج JSON ، أو حتى حذفه تمامًا. علامات الهيكل (أن مارشال يتعرف) على البدء بالسلسلة الفرعية "json:".

على سبيل المثال ، لنفترض أن لديك بنية سيارة التي تمثل بعض المعلومات حول السيارة. إليك الكود لإنشاء ملف سيارة وقم بتوجيهها إلى JSON:

طَرد رئيسي

يستورد (
"ترميز / json"
"FMT"
)

func رئيسي(){
يكتب هيكل السيارة {
سلسلة العلامة التجارية
سلسلة النموذج
سعر int
}
val: = سيارة {Brand: "مرسيدس"، نموذج: "بنز"السعر: 50000}
الدقة ، _: = json. مارشال (فال)
FMT.Println(خيط(الدقة))
}

ينتج هذا الرمز الإخراج:

ال ماركة, نموذج، و سعر حقول سيارة يجب أن تبدأ بأحرف كبيرة ، أو مارشال لن يكون قادرًا على تحويلها. ينتج عن هذا حقول إخراج JSON تبدأ بأحرف كبيرة أيضًا. ولكن ماذا لو كنت تريد أن تبدأ الأسماء بأحرف صغيرة في JSON ، أو إذا كنت تريد إعادة تسمية حقل بالكامل؟ هذا هو المكان الذي تأتي فيه علامات البنية. هذا مثال:

طَرد رئيسي
يستورد (
"ترميز / json"
"FMT"
)
func رئيسي(){
يكتب هيكل السيارة {
ID int `json:"-"`
سلسلة العلامة التجارية `json:"يكتب"`
سلسلة النموذج `json:"نموذج"`
السعر int `json:"سعر"`
}
val: = سيارة {المعرف: 0 ، العلامة التجارية: "مرسيدس"، نموذج: "بنز"السعر: 50000}
الدقة ، _: = json. مارشال (فال)
FMT.Println(خيط(الدقة))
}

يقدم هذا الرمز حقل معرف جديدًا مارشال يحذف من إخراج JSON عبر علامة Struct. يستخدم الكود أيضًا علامات هيكل لإعادة تسمية حقول البنية الأخرى. ها هو إخراج البرنامج:

كما ترى ، فإن جزء علامة البنية الذي يلي "json:" يصبح اسم الحقل في إخراج Marshal. هناك استثناء واحد: إذا كانت السلسلة "-" ، فإن Marshal يحذف هذا الحقل من الإخراج. يمكنك قراءة المزيد عن علامات Marshal و Struct في ملف اذهب الوثائق.

إلغاء التنظيم من JSON في Go

توفر حزمة encoding / json أيضًا وظيفة unmarshaling تسمى غير مارشال. لديها توقيع الوظيفة التالية:

func Unmarshal (بيانات [] بايت ، v واجهه المستخدم{}) خطأ

على عكس مارشال, غير مارشال لا ترجع قيمة. بدلاً من ذلك ، يقبل JSON كشريحة بايت في الوسيطة الأولى ثم يخزن البيانات المحولة في الكائن المشار إليه بواسطة الوسيطة الثانية. غير مارشال يعمل مع علامات الهيكل أيضًا ، ولكن هنا ، توضح العلامات غير مارشال أي حقول JSON تتطابق مع الحقول الهيكلية.

عند إلغاء التنظيم في أحد البرامج ، قد تفعل ذلك جلب البيانات من API، ولكن هنا ستستخدم بيانات وهمية. إليك كيف تستخدم غير مارشال:

طَرد رئيسي

يستورد (
"ترميز / json"
"FMT"
)

func رئيسي(){
يكتب هيكل السيارة {
ID int `json:"-"`
سلسلة العلامة التجارية `json:"يكتب"`
سلسلة النموذج `json:"نموذج"`
السعر int `json:"سعر"`
}

jsonInput: = `{
"يكتب": "تويوتا",
"نموذج": "كامري",
"سعر": 2000
}`

فار jsonOutput السيارة
يخطئ: = json. Unmarshal ([]بايت(jsonInput) ، & jsonOutput)

إذا أخطأت! = لا شيء {
FMT. Println ("خطأ في فك تشفير JSON!")
يعود
}

FMT.Println(jsonOutput)
}

يستخدم هذا الرمز نفس نوع السيارة مثل المثال السابق ، ويقوم بإلغاء تنظيم كائن JSON في بنية من النوع Car ، ثم يقوم بطباعة البيانات في الهيكل. عند التشغيل ، ينتج البرنامج هذا الإخراج:

يوضح هذا أنه تم إلغاء تنظيم بيانات JSON الوهمية بنجاح في ملف jsonOutput هيكل.

Go يجعل من السهل العمل مع JSON

باستخدام حزمة encoding / json ، يكون العمل مع JSON in Go بسيطًا مثل استدعائين للوظائف: Marshaland Unmarshal. يتيح لك Go أيضًا تخصيص عملية تنظيم / إلغاء تنظيم JSON باستخدام علامات البنية.

يعد تحويل البيانات إلى JSON طريقة رائعة لمشاركتها مع برنامج أو عملية أخرى. التنسيق عالمي لدرجة أن JSON محمولة قدر الإمكان.