خواندن اطلاعات از یک JSONObject موجود در یک JSONObject دیگر، در برنامه نویسی اندروید
گاهی یک JSONObject ، خود شامل JSONObject دیگری است، بنابراین قصد داریم که در این مبحث شرح بدهیم که چگونه می توان از JSONObject ای که خود درون یک JSONObject دیگر قرار دارد، اطلاعات بخوانیم.
فرض کنید که پاسخ یک صفحه اینترنتی (آدرس URL) به صورت زیر باشد :
بد نیست پاسخ فوق را به صورت زیر نمایش بدهیم تا ساختار آن را بهتر متوجه بشوید :
"info": "1",
"city": {
"shiraz": "10",
"tehran": "11",
"ghom": "12"
}
}
زمانی که در برنامه اندروید، پاسخ فوق را از آدرس اینترنتی (یک URL) دریافت می کنیم، کل آن به صورت یک JSONObject خواهد بود. این JSONObject ، دارای یک گره با نام info است که مقدار 1 برای آن در نظر گرفته شده است. سپس یک JSONObject با نام city داریم که خود شامل 3 گره با نام های shiraz و tehran و ghom می باشد که برای هر یک، یک مقدار متناظر در نظر گرفته شده است (مثلا برای shiraz ، مقدار 10 در نظر گرفته شده).
فرض می کنیم که در برنامه اندروید، تا این مرحله کد نوشته ایم که پاسخ URL ، دریافت شده و آن را به صورت یک JSONObject در اختیار داشته باشیم. برای این کار، کلاس های (class) آماده در اینترنت پیدا می شود (json parser) و در اینجا قصد نداریم که در مورد آنها صحبت کنیم.
با فرض اینکه JSONObject دارای نام json باشد، چنانچه بخواهیم مقدار مربوط به info را در یک رشته (string) ذخیره کنیم، کدهای زیر را می نویسیم :
اگر در پاسخ آدرس اینترنتی (آدرس URL) نگاه کنید، مقدار info برابر 1 است، بنابراین رشته info_string برابر 1 خواهد بود.
اما همان طور که در ابتدای مبحث گفتیم، قصد داریم اطلاعات مربوط به JSONObject داخلی را فراخوانی کنیم. برای این منظور، ابتدا باید JSONObject داخلی در پاسخ را به صورت یک JSONObject مجزا در کدهای اندروید، ذخیره کنیم. برای این منظور، کدهای زیر را می نویسیم :
همان طور که مشاهده می کنید، از JSONObject با نام json ، همان JSONObject داخلی که توسط کلمه city مشخص شده است را فراخوانی کرده ایم و سپس آن را به صورت یک JSONObject با نام json_city ذخیره کرده ایم.
اکنون فرض کنید که بخواهیم مقدار ذخیره شده برای shiraz را از JSONObject با نام json_city فراخوانی کرده و سپس در رشته ای با نام shiraz_string ذخیره کنیم، برای این منظور، کدهای زیر را می نویسیم :
بنابراین رشته shiraz_string دارای مقدار 10 خواهد بود.