formatJson function

String formatJson(
  1. Object json,
  2. String keyColor,
  3. String valueColor,
  4. String braceColor,
)

Implementation

String formatJson(
    Object json, String keyColor, String valueColor, String braceColor) {
  /// Formats a JSON object into a readable string with color coding.
  var buffer = StringBuffer();
  buffer.write('$braceColor{\n');

  // Helper function to recursively format JSON
  void formatEntry(String key, dynamic value, int indentLevel) {
    String indent = '  ' * indentLevel; // Create indentation based on level
    if (value is Map) {
      if (value.isNotEmpty) {
        buffer.write('$indent$keyColor"$key"$reset: $braceColor{\n');
        value.forEach((k, v) {
          formatEntry(k, v, indentLevel + 1); // Recurse into map
        });
        buffer.write('$indent$braceColor},\n');
      } else {
        buffer.write(
            '$indent$keyColor"$key"$reset: $braceColor{},\n'); // For empty maps
      }
    } else if (value is List) {
      if (value.isNotEmpty) {
        buffer.write('$indent$keyColor"$key"$reset: $braceColor[\n');
        for (var item in value) {
          if (item is Map) {
            buffer.write('$indent  $braceColor{\n');
            item.forEach((k, v) {
              formatEntry(k, v, indentLevel + 2); // Recurse into map
            });
            buffer.write('$indent  $braceColor},\n');
          } else {
            buffer.write(
                '$indent  $valueColor"$item"$reset,\n'); // Directly log other types
          }
        }
        buffer.write('$indent$braceColor],\n');
      } else {
        buffer.write(
            '$indent$keyColor"$key"$reset: $braceColor[],\n'); // For empty lists
      }
    } else {
      buffer
          .write('$indent$keyColor"$key"$reset: $valueColor"$value"$reset,\n');
    }
  }

  // Implementation for processing Map and List types.
  if (json is Map) {
    json.forEach((key, value) {
      formatEntry(key, value, 1);
    });
  } else if (json is List) {
    for (var item in json) {
      if (item is Map) {
        item.forEach((key, value) {
          formatEntry(key, value, 1);
        });
      }
    }
  }

  // Remove the last comma and newline
  if (buffer.isNotEmpty) {
    buffer.write('\b\b');
  }

  buffer.write('$braceColor}');
  return buffer.toString();
}