ورود

View Full Version : سوال: تشخیص نوع متغیر JSON.stringify



parsdarab
جمعه 11 تیر 1395, 17:24 عصر
سلام دوستان

من یه متغیر تعریف کردم و اونو میخام به یک تابع دیگه پاس بدم


var data = JSON.stringify({
id: _id,
ReplyId: _idComment
})

توی اون تابع چطوری تشخیص بدم که که این متغییر از نوع JSON.stringify می باشد؟

مثلا برای تشخیص ارایه در جاوا اسکریپت از دستور زیر استفاده میشه


if (grid instanceof Array)

alireza_s_84
جمعه 11 تیر 1395, 18:37 عصر
سلام دوستان

من یه متغیر تعریف کردم و اونو میخام به یک تابع دیگه پاس بدم


var data = JSON.stringify({
id: _id,
ReplyId: _idComment
})

توی اون تابع چطوری تشخیص بدم که که این متغییر از نوع JSON.stringify می باشد؟

مثلا برای تشخیص ارایه در جاوا اسکریپت از دستور زیر استفاده میشه


if (grid instanceof Array)



اول شما توجه داشته باش که نتیجه JSON.stringify یک رشته ست. پس برای چک کردن اون میشه به شکل زیر اقدام کرد:
if (typeof myVar === 'string' || myVar instanceof String)

ولی هر رشته ای قاعدتا نمیتونه یک رشته json قابل اعتبار باشه که به شکل زیر میشه فهمید آیا رشته موردنظر یک رشته قابل تبدیل به Json Object هست یا خیر:
function IsJsonString(str) { try {
JSON.parse(str);
} catch (e) {
return false;
}
return true;
}

یا از طریق regex:
if (/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {


//the json is ok


}else{


//the json is not ok


}

parsdarab
جمعه 11 تیر 1395, 19:07 عصر
سلام

ممنونم بابت پاسختون

141205

ولی منظور من تشخیص نوع متغیر عادی و جیسون بود

مطابق شکل با می خواهم بفهمم وقتی تابع مورد نظر را صدا می زنم درون اون تابع تشخیص بدم آبا متغیر Id فقط عدد داخل هست یا نه از نوع جیسون می باشد و بر اساس دستور if تصمیم مورد نطر را بگیرم

کدی که شما نوشتید اکه داخل متغیر Id عدد 29 هم باشد اینم بهت میگه جیسونه

alireza_s_84
جمعه 11 تیر 1395, 22:15 عصر
سلام

ممنونم بابت پاسختون

141205

ولی منظور من تشخیص نوع متغیر عادی و جیسون بود

مطابق شکل با می خواهم بفهمم وقتی تابع مورد نظر را صدا می زنم درون اون تابع تشخیص بدم آبا متغیر Id فقط عدد داخل هست یا نه از نوع جیسون می باشد و بر اساس دستور if تصمیم مورد نطر را بگیرم

کدی که شما نوشتید اکه داخل متغیر Id عدد 29 هم باشد اینم بهت میگه جیسونه

شما به ازای هر مقدار اسکالر مثل یک عدد یا true/false همیشه مقدار json معتبر خواهید داشت مگر اینکه نوع اون رشته باشه تا بعد سعی کنه اون رو به یک آبجکت تبدیل کنه. اگر میخواین چک کنید که نوع Id عددی هست بهتره از روش دیگه ای استفاده کنید:
(typeof id === "number")

parsdarab
شنبه 12 تیر 1395, 00:12 صبح
مرسی از روشی دیگه ای استفاده کردم

(typeof id === "number")