1. import json
  2. def aggregate_form_submissions(submissions_dir):
  3. """
  4. Aggregates values from form submissions in a directory of JSON files.
  5. Args:
  6. submissions_dir (str): Path to the directory containing form submission JSON files.
  7. Returns:
  8. dict: A dictionary containing aggregated values. Returns an empty dict if no files found.
  9. """
  10. aggregated_data = {}
  11. file_count = 0
  12. for filename in os.listdir(submissions_dir):
  13. if filename.endswith(".json"):
  14. file_count += 1
  15. filepath = os.path.join(submissions_dir, filename)
  16. try:
  17. with open(filepath, 'r') as f:
  18. data = json.load(f)
  19. # Iterate through the data, assuming a list of submissions
  20. if isinstance(data, list):
  21. for submission in data:
  22. for key, value in submission.items():
  23. if key not in aggregated_data:
  24. aggregated_data[key] = []
  25. aggregated_data[key].append(value)
  26. elif isinstance(data, dict): #Handle single submission json
  27. for key, value in data.items():
  28. if key not in aggregated_data:
  29. aggregated_data[key] = []
  30. aggregated_data[key].append(value)
  31. else:
  32. print(f"Skipping file {filename}: Invalid data format.")
  33. except json.JSONDecodeError:
  34. print(f"Skipping file {filename}: Invalid JSON format.")
  35. except Exception as e:
  36. print(f"Error processing {filename}: {e}")
  37. return aggregated_data
  38. import os
  39. if __name__ == '__main__':
  40. #Example Usage (create dummy files for testing)
  41. if not os.path.exists('test_submissions'):
  42. os.makedirs('test_submissions')
  43. with open('test_submissions/submission1.json', 'w') as f:
  44. json.dump([{'name': 'Alice', 'age': 30, 'city': 'New York'}, {'name': 'Bob', 'age': 25, 'city': 'Los Angeles'}], f)
  45. with open('test_submissions/submission2.json', 'w') as f:
  46. json.dump({'name': 'Charlie', 'age': 35, 'city': 'Chicago'}, f)
  47. aggregated = aggregate_form_submissions('test_submissions')
  48. print(json.dumps(aggregated, indent=2))

Add your comment