import json
def aggregate_form_submissions(submissions_dir):
"""
Aggregates values from form submissions in a directory of JSON files.
Args:
submissions_dir (str): Path to the directory containing form submission JSON files.
Returns:
dict: A dictionary containing aggregated values. Returns an empty dict if no files found.
"""
aggregated_data = {}
file_count = 0
for filename in os.listdir(submissions_dir):
if filename.endswith(".json"):
file_count += 1
filepath = os.path.join(submissions_dir, filename)
try:
with open(filepath, 'r') as f:
data = json.load(f)
# Iterate through the data, assuming a list of submissions
if isinstance(data, list):
for submission in data:
for key, value in submission.items():
if key not in aggregated_data:
aggregated_data[key] = []
aggregated_data[key].append(value)
elif isinstance(data, dict): #Handle single submission json
for key, value in data.items():
if key not in aggregated_data:
aggregated_data[key] = []
aggregated_data[key].append(value)
else:
print(f"Skipping file {filename}: Invalid data format.")
except json.JSONDecodeError:
print(f"Skipping file {filename}: Invalid JSON format.")
except Exception as e:
print(f"Error processing {filename}: {e}")
return aggregated_data
import os
if __name__ == '__main__':
#Example Usage (create dummy files for testing)
if not os.path.exists('test_submissions'):
os.makedirs('test_submissions')
with open('test_submissions/submission1.json', 'w') as f:
json.dump([{'name': 'Alice', 'age': 30, 'city': 'New York'}, {'name': 'Bob', 'age': 25, 'city': 'Los Angeles'}], f)
with open('test_submissions/submission2.json', 'w') as f:
json.dump({'name': 'Charlie', 'age': 35, 'city': 'Chicago'}, f)
aggregated = aggregate_form_submissions('test_submissions')
print(json.dumps(aggregated, indent=2))
Add your comment