Untitled
unknown
javascript
a year ago
2.9 kB
10
Indexable
/** * Validates values of JSON objects * @param {JSON} jsonObj - JSON object to validate * @returns {boolean} True if JSON data is valid, otherwise false */ const validateJSONData = jsonObj => { const parsedData = JSON.parse(jsonObj); const uniqueValues = new Set(); const uniqueUrls = new Set(); const urlPattern = /^https:\/\/booth\.pm\/en\/items\/\d+$/; return parsedData.every(obj => { // loop over JSON objects for (const property in obj) { // loop over nested object (which is 'credits' property) if (property === 'credits') { for (const nestedProperty in obj[property]) { // check if nested property is defined and contains string value if (!obj[property][nestedProperty] || typeof obj[property][nestedProperty] !== 'string') { console.error(`"${nestedProperty}" property in "${property}" is not valid. Expected non-empty string, received: ${obj[property][nestedProperty]}`); return false; // check if nested property contains duplicate value } else if (uniqueUrls.has(obj[property][nestedProperty].toLowerCase())) { console.error(`"${nestedProperty}" property in "${property}" contains duplicate value: "${obj[property][nestedProperty]}"`); return false; // check if URL is in appropriate format } else if (!urlPattern.test(obj[property][nestedProperty])) { console.error(`"${nestedProperty}" property in "${property}" contains invalid URL: "${obj[property][nestedProperty]}"`); return false; } else { // save current value for duplicate matching uniqueUrls.add(obj[property][nestedProperty].toLowerCase()); } } continue; } // check if property is defined and contains string value if (!obj[property] || typeof obj[property] !== 'string') { console.error(`"${property}" property is not valid. Expected non-empty string, received: ${obj[property]}`); return false // check if `fileName` or `name` property contains duplicate values } else if ((property === 'fileName' || property === 'name') && uniqueValues.has(obj[property].replace(/\s/g, '').toLowerCase())) { console.error(`"${property}" property contains duplicate value: "${obj[property]}"`); return false; } else { // save current value for duplicate matching uniqueValues.add(obj[property].replace(/\s/g, '').toLowerCase()); } } return true; }); }
Editor is loading...
Leave a Comment