41 lines
1.2 KiB
JavaScript
41 lines
1.2 KiB
JavaScript
|
|
//#region src/predicate/isJSON.ts
|
||
|
|
/**
|
||
|
|
* Checks if a given value is a valid JSON string.
|
||
|
|
*
|
||
|
|
* A valid JSON string is one that can be successfully parsed using `JSON.parse()`. According to JSON
|
||
|
|
* specifications, valid JSON can represent:
|
||
|
|
* - Objects (with string keys and valid JSON values)
|
||
|
|
* - Arrays (containing valid JSON values)
|
||
|
|
* - Strings
|
||
|
|
* - Numbers
|
||
|
|
* - Booleans
|
||
|
|
* - null
|
||
|
|
*
|
||
|
|
* String values like `"null"`, `"true"`, `"false"`, and numeric strings (e.g., `"42"`) are considered
|
||
|
|
* valid JSON and will return true.
|
||
|
|
*
|
||
|
|
* This function serves as a type guard in TypeScript, narrowing the type of the argument to `string`.
|
||
|
|
*
|
||
|
|
* @param {unknown} value The value to check.
|
||
|
|
* @returns {boolean} Returns `true` if `value` is a valid JSON string, else `false`.
|
||
|
|
*
|
||
|
|
* @example
|
||
|
|
* isJSON('{"name":"John","age":30}'); // true
|
||
|
|
* isJSON('[1,2,3]'); // true
|
||
|
|
* isJSON('true'); // true
|
||
|
|
* isJSON('invalid json'); // false
|
||
|
|
* isJSON({ name: 'John' }); // false (not a string)
|
||
|
|
* isJSON(null); // false (not a string)
|
||
|
|
*/
|
||
|
|
function isJSON(value) {
|
||
|
|
if (typeof value !== "string") return false;
|
||
|
|
try {
|
||
|
|
JSON.parse(value);
|
||
|
|
return true;
|
||
|
|
} catch {
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
//#endregion
|
||
|
|
exports.isJSON = isJSON;
|