تجزیه ی 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 برویم و فایل مورد نظر را انتخاب و اضافه کنیم.
به این ترتیب، سه تا کلاس و ماژول را به پروژه اضافه می کنیم.

توجههمچنین باید تعدادی کتابخانه را نیز به پروژه اضافه کنیم. برای این منظور از منوی Project گزینه ی References... را انتخاب می کنیم و موارد زیر را تیک می زنیم:

Microsoft Data Source Interfaces
C:\Windows\system32\msdatsrc.tlb

Microsoft Scripting Runtime
C:\Windows\system32\scrrun.dll

Microsoft ActiveX Data Objects 2.5 Library
C:\Program Files\Common Files\system\ado\msado25.tlb

اکنون وقت آن است که از کتابخانه ی VBJSON در برنامه مان استفاده کنیم.

موضوع اصلی مورد نظر ما، ماژول JSON.bas می باشد. این ماژول همان طور که در شکل می بینید، دارای چند تا متد و خصوصیت است:

متد های ماژول JSON

  • 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 تجزیه شده است.

نکتهنوع Dictionary در کتابخانه ی Microsoft Scripting Runtime تعریف شده که در فایل C:\Windows\system32\scrrun.dll موجود است.

همان طور که می بینید، می توانیم خروجی متد 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 شروع می شود.

نکته: سایر متد های Dictionary

آبجکت Dictionary که از تجزیه کردن JSON به دست می آید، دارای متد های متعددی است. که می توان به متد Add اشاره کرد.
به این روش می توان JSON را که پردازش کردیم، بر روی آن عملیات های مورد نظرمان را انجام دهیم و مثلا آبجکت ها یا خصوصیت های مورد نظرمان را به آن اضافه کنیم.
در نهایت هم می توانیم با متد JSON.toString آن را دوباره به فرمت JSON در بیاوریم (متد فوق در زیر توضیح داده شده است.)

p.Item("items").Item(1).Add "ExtraItem", "Extra Data Value"
MsgBox "Parsed object output with added item: " & JSON.toString(p)

کد فوق، یک آیتم جدید به نام ExtraItem و مقدار Extra Data Value به دیکشنری اضافه می کند. سپس آن را با متد JSON.toString دوباره به فرمت JSON برگرداندیم.

متد GetParserErrors

در صورتی که تجزیه گر (یعنی متد JSON.parse) با خطایی مواجه شده باشد، به کمک این متد، می توان توضیح خطای رخ داده را بدست آورد.

متد ClearParserErrors

 خطا های موجود در بافر را پاک می کند

متد JSON.toString

این متد، یک دیکشنری (که حاصل از تجزیه ی JSON می باشد)، را دریافت می کند و آن را به صورت رشته ی JSON بر می گرداند.

--

نظرات شما

قسمت نظرات با استفاده از سرویس دیسکاس پیاده سازی شده است. متاسفانه این سرویس از داخل ایران قابل دسترس نیست. لطفا از آی پی خارجی استفاده کنید.