تجزیه ی JSON در Visual Basic 6
اخیرا داشتم برنامه ای می نوشتم که نیازمند ارتباط دوطرفه بین کلاینت و سرور بود.
برای انجام این کار روش های مختلفی وجود داشت، ولی در نهایت تصمیم گرفتم که برنامه ی تحت کلاینت را با Visual Basic 6 بنویسم و قسمت تحت سرور را هم با php و تحت فریمورک دروپال برنامه نویسی کنم. به این ترتیب، امکانات برنامه و قابلیت توسعه پذیری آن در آینده بهبود پیدا می کرد.
در این مرحله لازم بود که یک پروتکل ارتباطی نیز تعریف کنم. در نسخه های قبلی برنامه پروتکل را خودم طراحی کرده بودم (برنامه ی سمت سرور را هم با ASP.NET نوشته بودم) ولی در نسخه ی جدید برنامه بهتر دیدم که از پروتکل REST و فرمت JSON استفاده کنم. زیرا دروپال یک ماژول دارد به نام Services که این قسمت سمت سرور را بسیار عالی و تمیز انجام می دهد.
در این جا لازم بود که یک برنامه نیز برای تجزیه ی JSON در ویژوال بیسیک 6 داشته باشم. که خوشبختانه یک کتابخانه ی آماده برای این کار پیدا کردم و خیلی در وقت من صرفه جویی شد.
نام این کتابخانه VBJSON می باشد. در این مقاله قصد دارم طرز کار کردن و استفاده از کتابخانه ی VBJSON در ویژوال بیسیک 6 را توضیح دهم.
قبل از هر چیز باید فایل فشرده را از آدرس زیر دانلود کنیم:
http://www.ediy.co.nz/vbjson-json-parser-library-in-vb6-xidc55680.html
که البته من آن را به این مطلب نیز ضمیمه کردم: VBJSON
این فایل فشرده شامل یک برنامه ی نمونه نیز می باشد.
این کتابخانه در اصل از 3 تا فایل تشکیل شده است. دو تا کلاس و یک ماژول که عبارتند از:
- ماژول JSON.bas (این ماژول، قسمت اصلی کتابخانه است و در برنامه هایمان باید از این استفاده کنیم)
- کلاس cJSONScript.cls (این کلاس شامل کد های لازم برای اجرا کردن JSON می باشد. به این معنی که JSON را به عنوان یک اسکریپت در نظر می گیرد و آن را اجرا می کند. در این مقاله به این کلاس نمی پردازم)
- کلاس cStringBuilder.cls (این کلاس شامل یک سری متد هایی است که کار با رشته ها را انجام می دهند. در واقع دلیل استفاده از این کلاس به جای توابع رشته ای درون ساخته ی ویژال بیسیک این است که، توابع درون ساخته ی ویژوال بیسیک بیش از حد کند هستند. اما این کلاس، با استفاده از توابع سطح پایین ویندوز و منطق پیشرفته ی خودش، توانسته به شکل قابل توجه ای کار کردن با رشته ها را سریع تر کند.
از آن جایی که پردازش JSON نیازمند کار زیاد با رشته ها میباشد، استفاده از این کلاس، سبب می شود که سرعت کار به شکل چشمگیری بهبود پیدا کند.)
برای شروع کار، یک پروژه ی جدید در ویژوال بیسیک 6 ایجاد می کنیم و سه تا فایل فوق را در درون پوشه ی پروژه کپی می کنیم
اکنون باید این سه تا کلاس و ماژول را به ویژوال استودیو معرفی کنیم. برای منظور، کافی است که از منوی Project، گزینه ی Add Module (برای افزودن ماژول) و یا Add Class Module (برای افزودن کلاس) را کلیک کنیم و در پنجره ی باز شده، به زبانه ی Existing برویم و فایل مورد نظر را انتخاب و اضافه کنیم.
به این ترتیب، سه تا کلاس و ماژول را به پروژه اضافه می کنیم.
اکنون وقت آن است که از کتابخانه ی VBJSON در برنامه مان استفاده کنیم.
موضوع اصلی مورد نظر ما، ماژول JSON.bas می باشد. این ماژول همان طور که در شکل می بینید، دارای چند تا متد و خصوصیت است:
- ClearParserErrore
- GetParserErrors
- parse
- RStoJSON
- StringTOJSON
- toString
- toUnicode
برای شروع کار، ابتدا حالتی را فرض می کنیم که یک رشته ی متنی شامل JSON را داریم و می خواهم آن را تجزیه کنیم و اشیاء موجود در آن را استخراج کنیم.
برای این کار، می بایست رشته ی مورد نظرمان را در درون یک متغیر داشته باشیم:
Dim sInputJson As String
sInputJson = "{ width: '200', frame: false, height: 130, bodyStyle:'background-color: #ffffcc;',buttonAlign:'right', items: [{ xtype: 'form', url: '/content.asp'},{ xtype: 'form2', url: '/content2.asp'}] }"
سپس باید آن را به متد parse از ماژول JSON پاس کنیم:
Dim p As Object ' sets p Set p = JSON.parse(sInputJson) MsgBox "Parsed object output: " & JSON.toString(p) MsgBox "Get Bodystyle data: " & p.Item("bodyStyle") MsgBox "Get Form Url data: " & p.Item("items").Item(1).Item("url") p.Item("items").Item(1).Add "ExtraItem", "Extra Data Value" MsgBox "Parsed object output with added item: " & JSON.toString(p)
متد JSON.parse یک آبجکت از نوع Dictionary را برمیگرداند که شامل JSON تجزیه شده است.
همان طور که می بینید، می توانیم خروجی متد parse را در متغیری مثل p ذخیره کنیم و سپس از آن به طریق معمول Dictionary ها استفاده کنیم.
برای نمونه، کد JSON زیر را در نظر بگیرید:
{ width: '200', frame: false, height: 130, bodyStyle:'background-color: #ffffcc;', buttonAlign:'right', items: [ { xtype: 'form', url: '/content.asp' }, { xtype: 'form2', url: '/content2.asp' } ] }
هنگامی که کد JSOn فوق را به کمک متد JSON.parse تجزیه می کنیم و در متغیر p ذخیره می کنیم، می توان به اجزای این آبجکت JSON به روش زیر دسترسی داشت:
مثلا می خواهیم مقدار خاصیت width را به دست آوریم:
p.Item("width")
همچنین، مقدار p.Item("items") خودش یک Dictionart دیگر است و می توان به اجزا آن به صوت تو در تو دسترسی داشت:
p.Item("items").Item(1).Item("url")
نکته ی حائز اهمیت در این جا این است که برای دسترسی به مقادیر خصوصیت های اشیا، کافی است که نام خصوصیت را به متد Item ارسال کنیم. ولی برای دسترسی به مقادیر موجود در آرایه ها باید شماره ی ایندکس آرایه را ارسال کنیم. که شمارش ایندکس آرایه از 1 شروع می شود.
متد GetParserErrors
در صورتی که تجزیه گر (یعنی متد JSON.parse) با خطایی مواجه شده باشد، به کمک این متد، می توان توضیح خطای رخ داده را بدست آورد.
متد ClearParserErrors
خطا های موجود در بافر را پاک می کند
متد JSON.toString
این متد، یک دیکشنری (که حاصل از تجزیه ی JSON می باشد)، را دریافت می کند و آن را به صورت رشته ی JSON بر می گرداند.
--
نظرات شما
قسمت نظرات با استفاده از سرویس دیسکاس پیاده سازی شده است. متاسفانه این سرویس از داخل ایران قابل دسترس نیست. لطفا از آی پی خارجی استفاده کنید.