/** * JSON 字段解析工具 * * 用于安全解析数据库中存储的 JSON 字符串 */ /** * 解析 JSON 字段 * * @param value - 数据库中的 JSON 字符串 * @param defaultValue - 解析失败时的默认值 * @returns 解析后的对象或默认值 * * @example * ```typescript * const tags = parseJsonField(course.gradeTags, []); * const settings = parseJsonField(user.settings, {}); * ``` */ export function parseJsonField( value: string | null | undefined, defaultValue: T, ): T { if (!value) { return defaultValue; } try { return JSON.parse(value) as T; } catch { return defaultValue; } } /** * 安全地将对象转换为 JSON 字符串 * * @param value - 要转换的对象 * @param defaultValue - 转换失败时的默认值 * @returns JSON 字符串或默认值 */ export function stringifyJsonField( value: any, defaultValue: string = '{}', ): string { if (value === null || value === undefined) { return defaultValue; } try { return JSON.stringify(value); } catch { return defaultValue; } } /** * 解析 JSON 数组字段 * * @param value - 数据库中的 JSON 数组字符串 * @returns 解析后的数组或空数组 */ export function parseJsonArray(value: string | null | undefined): T[] { return parseJsonField(value, []); } /** * 解析 JSON 对象字段 * * @param value - 数据库中的 JSON 对象字符串 * @returns 解析后的对象或空对象 */ export function parseJsonObject>( value: string | null | undefined, ): T { return parseJsonField(value, {} as T); }