formatJson function
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();
}