تو این پست میخوام در مورد JSON که یک global object در جاوااسکریپت هست و یسری قابلیت های باحالی که ممکنه تا حالا ندیده باشیم صحبت کنم.
من اینجا فرض رو براین میگیرم که شما میدونید json چیه و ساختارش به چه صورته و اینجا یک سری قابلیت های بیشتر از متدهایی که ابجکت JSON به ما ارائه میده میگم، اگه با آشنایی کافی ندارید برای مطالعه بیشتر میتونید ایجا کلیک کنید.
امروزه انتقال دیتا به صورت json بسیار رایجه و روزانه ما با این نوع ساختار برخورد زیادی داریم این قابلیت بسیار مفید هستند.
const user = { name: 'Ali', age: 23, isAdmin: true, friends: ['Reza', 'Mohsen'], address: { city: 'Tehran', country: 'Iran' } }; console.log(JSON.stringify(user));
خروجی کد بالا رو اینجا در حالت عادی ببینیم اینجا میبینم:
{"name":"Ali","age":23,"isAdmin":true,"friends":["Reza","Mohsen"],"address":{"city":"Tehran","country":"Iran"}}
حالا میخوایم با قابلیت خوانایی بیشتر فرمت کنیم و ببینیم:
console.log(JSON.stringify(user, null, 2)); { "name": "Ali", "age": 23, "isAdmin": true, "friends": [ "Reza", "Mohsen" ], "address": { "city": "Tehran", "country": "Iran" } }
تو این حالت دیتای خروجی 2 تا space به صورت indentation دادیم.
حالا اگه بخوایم یه کاراکتر خاص رو به ابتدای هر فیلد اضافه کنیم و به جای space کاراکتر یا رشته مورد نظر ما قرار بگیره به صورت زیر عمل میکنیم.
console.log(JSON.stringify(user, null, 'AAA')); { AAA"name": "Ali", AAA"age": 23, AAA"isAdmin": true, AAA"friends": [ AAA"Reza", AAA"Mohsen" AAA ], AAA"address": { AAA"city": "Tehran", AAA"country": "Iran" AAA} AAA}
دومین پارامتر ورودی stringify میتونه یک تابع (function) یا آرایه (array) باشه که به صورت زیر عمل میکنه.
const user = { name: 'Ali', password: '6543221', age: 23 } console.log(JSON.stringify(user, ['name', 'age']));
خروجی کد بالا به صورت زیر هست:
{"name":"Ali","age":23}
وقتی از آرایه در پارامتر دوم استفاده کنیم. تنها فیلدهایی که در این آرایه هستند برگشت داده میشه.
function stripKeys(...keys) { return (key, value) => { if (keys.includes(key)) { return; } return value; }; } const user = { name: 'Ali', password: '6543221', age: 23, gender: 'male' }; console.log(JSON.stringify(user, stripKeys('password', 'gender')));
خروجی بالا به صورت زیر است:
{"name":"Ali","age":23}
همونطور که در مثال بالا دیدیم میتونیم آرگمان دوم که replace هست رو یه تابع بدیم و خروجی به دلخواه تعیین کنیم.
طبق معمول خلاصه و مفید، امیدوارم مفید باشه براتون.