class JsonSafe { static String asString(dynamic value, [String fallback = '']) { if (value is String) return value; return fallback; } static String? asStringOrNull(dynamic value) { if (value is String) return value; return null; } static int asInt(dynamic value, [int fallback = 0]) { if (value is int) return value; if (value is num) return value.toInt(); if (value is String) return int.tryParse(value) ?? fallback; return fallback; } static double asDouble(dynamic value, [double fallback = 0.0]) { if (value is double) return value; if (value is num) return value.toDouble(); if (value is String) return double.tryParse(value) ?? fallback; return fallback; } static bool asBool(dynamic value, [bool fallback = false]) { if (value is bool) return value; if (value is int) return value != 0; if (value is String) return value.toLowerCase() == 'true'; return fallback; } }