canonicalJsonValue function
Recursively processes an object to create a canonical JSON representation.
Binds: Part A — extract a shared canonical-JSON util.
Implementation
Object? canonicalJsonValue(Object? value) {
if (value == null) return null;
if (value is num || value is String || value is bool) {
return value;
}
if (value is Enum) {
return value.name;
}
if (value is Map) {
final sortedKeys = value.keys.map((k) => k.toString()).toList()..sort();
final result = <String, Object?>{};
for (final key in sortedKeys) {
result[key] = canonicalJsonValue(value[key]);
}
return result;
}
if (value is Set) {
return value.map(canonicalJsonValue).toList();
}
if (value is List) {
return value.map(canonicalJsonValue).toList();
}
try {
return canonicalJsonValue((value as dynamic).toJson());
} catch (_) {
return value.toString();
}
}