jsonToCsv static method

String jsonToCsv(
  1. String json, {
  2. String delimiter = ",",
})

Implementation

static String jsonToCsv(String json, {String delimiter = ","}) {
  final dynamic decoded = jsonDecode(json);
  if (decoded is! List) throw const FormatException("jsonToCsv expects a JSON array of objects.");
  if (decoded.isEmpty) return "";
  final List<String> headers = <String>[];
  for (final dynamic row in decoded) {
    if (row is Map<String, dynamic>) {
      for (final String key in row.keys) {
        if (!headers.contains(key)) headers.add(key);
      }
    }
  }
  final StringBuffer sb = StringBuffer()..writeln(headers.map((String h) => _csvField(h, delimiter)).join(delimiter));
  for (final dynamic row in decoded) {
    final Map<String, dynamic> map = row is Map<String, dynamic> ? row : <String, dynamic>{};
    sb.writeln(headers.map((String h) => _csvField(map[h] == null ? "" : "${map[h]}", delimiter)).join(delimiter));
  }
  return sb.toString().trimRight();
}