makeValidJson static method

String makeValidJson(
  1. String input
)

Implementation

static String makeValidJson(String input) {
  // Replace 'undefined' with null
  input = input.replaceAll(RegExp(r'\bundefined\b'), 'null');

  // Add double quotes around keys, ignoring URLs (http: or https:)
  input = input.replaceAllMapped(
    RegExp(r'(\b(?!http|https)[a-zA-Z0-9_]+)(?=:)', multiLine: true),
    (match) => '"${match.group(0)}"',
  );

  // Add double quotes around string values while ignoring URLs
  input = input.replaceAllMapped(
    RegExp(r':\s*([^"{\[\],\s][^,}\]]*)'),
    (match) {
      final value = match.group(1);
      // If value starts with http or https, don't wrap it in quotes
      if (value != null &&
          (value.startsWith('http:') || value.startsWith('https:'))) {
        return ':"$value"'; // Don't add quotes for URLs
      }
      // Otherwise, quote it normally
      return ': "$value"';
    },
  );

  try {
    // Parse to ensure it's valid JSON
    final jsonObject = jsonDecode(input);
    return const JsonEncoder.withIndent('  ').convert(jsonObject); // Pretty-printed JSON
  } on FormatException catch (e) {
    return 'FormatException: ${e.toString()}';
  } on Exception catch (e) {
    return 'Error: ${e.toString()}';
  }
}