import stringifyJSON from 'fast-json-stable-stringify';
/**
* JSON utility functions
* @module json
*/
/**
* Checks if a string is valid JSON
* @param {string} str - The string to check
* @returns {boolean} True if the string is valid JSON
* @example
* ```ts
* isJsonString('{"key": "value"}') // => true
* isJsonString('{key: value}') // => false
* ```
*/
export const isJsonString = (str: string) => {
try {
if (typeof JSON.parse(str) === 'object' && str !== null) {
return true;
}
}
catch (e) {
console.log(e);
}
return false;
};
/**
* Safely stringifies a JSON value with fallback
* @param {unknown} json - The value to stringify
* @param {unknown} fallbackValue - Value to return if stringification fails
* @returns {string} Stringified JSON or fallback value
* @example
* ```ts
* stringifyJsonWithFallback({ key: 'value' }, 'fallback') // => '{"key":"value"}'
* stringifyJsonWithFallback(undefined, 'fallback') // => 'fallback'
* ```
*/
export function stringifyJsonWithFallback(json: unknown, fallbackValue: unknown) {
if (json === undefined || json === null) {
return `${fallbackValue}`;
}
try {
return stringifyJSON(json);
} catch {
return fallbackValue;
}
}
/**
* Safely parses a JSON string with fallback
* @param {any} [jsonValue=''] - The JSON string to parse
* @param {unknown} [fallbackValue] - Value to return if parsing fails
* @returns {any} Parsed JSON object or fallback value
* @example
* ```ts
* parseJsonWithFallback('{"key": "value"}') // => { key: 'value' }
* parseJsonWithFallback('{key: value}', 'fallback') // => 'fallback'
* ```
*/
export function parseJsonWithFallback(jsonValue: any = '', fallbackValue?: unknown) {
try {
return JSON.parse(jsonValue);
} catch {
return fallbackValue ?? jsonValue;
}
}