canonicalJson function

String canonicalJson(
  1. Map<String, dynamic> data
)

JSON kanonis: sort keys rekursif biar hash stabil.

Implementation

String canonicalJson(Map<String, dynamic> data) {
  final sortedKeys = data.keys.toList()..sort();
  final out = <String, dynamic>{};
  for (final k in sortedKeys) {
    final v = data[k];
    if (v is Map<String, dynamic>) {
      out[k] = jsonDecode(canonicalJson(v));
    } else if (v is Map) {
      out[k] = jsonDecode(canonicalJson(Map<String, dynamic>.from(v)));
    } else if (v is List) {
      out[k] = v
          .map(
            (e) => e is Map<String, dynamic> ? jsonDecode(canonicalJson(e)) : e,
          )
          .toList();
    } else {
      out[k] = v;
    }
  }
  return jsonEncode(out);
}