From 152f1c4366bb8ad287ebdbabe3b34b8d456048fd Mon Sep 17 00:00:00 2001 From: Onkar Kota Date: Thu, 19 Oct 2023 18:04:11 +0530 Subject: [PATCH] Added json_to_csv project --- Python Projects/json_to_csv/README.MD | 53 ++++++++++++++++ .../__pycache__/json_to_csv.cpython-311.pyc | Bin 0 -> 3478 bytes Python Projects/json_to_csv/image.png | Bin 0 -> 9957 bytes Python Projects/json_to_csv/json_data.json | 28 +++++++++ .../json_to_csv_with_nested_dict.py | 59 ++++++++++++++++++ 5 files changed, 140 insertions(+) create mode 100644 Python Projects/json_to_csv/README.MD create mode 100644 Python Projects/json_to_csv/__pycache__/json_to_csv.cpython-311.pyc create mode 100644 Python Projects/json_to_csv/image.png create mode 100644 Python Projects/json_to_csv/json_data.json create mode 100644 Python Projects/json_to_csv/json_to_csv_with_nested_dict.py diff --git a/Python Projects/json_to_csv/README.MD b/Python Projects/json_to_csv/README.MD new file mode 100644 index 00000000..3fa8ddf2 --- /dev/null +++ b/Python Projects/json_to_csv/README.MD @@ -0,0 +1,53 @@ +# json to csv convertor + +## Introduction + +This Python script allows you to convert json file to csv file and save them to a specified directory. It uses json and csv library to process json files and do manupulations accordingly. + +## Usage + +### Prerequisites + +Before using this script, ensure you have the following: + +- Python installed on your system. +- Required libraries: `csv`, `json`, `python` + +### Running the Script + +1. Place the json file you want to convert to csv file in the same directory as this script. + +2. Replace the `input_file` variable with the name of your json file name with .json extention. + +```python +input_file = 'json_data.json' +python json_to_csv_with_nested_dict.py +``` + +### Information about .py file + +1. `json_to_csv` function + +- This function defines the JSON to CSV converter. It takes three arguments: +- Args : + - **json_data**: A JSON object or list of JSON objects. + - **csv_file**: The path to the CSV file to write the data to. + - **mapping**: A dictionary mapping JSON field names to CSV column headers. +- Returns: + - None + +1. `flatten_json` function + +- This function flattens the JSON data. It works by recursively iterating over the JSON object and converting any nested JSON objects into a single level of key-value pairs. + +- Args : + - **obj**: A nested JSON object. + +- Returns: + - A flattened JSON object. + +### Output + +The script will create a directory named **csv_data.csv** in the same location as the script. Within this directory. + +![Alt text](image.png) \ No newline at end of file diff --git a/Python Projects/json_to_csv/__pycache__/json_to_csv.cpython-311.pyc b/Python Projects/json_to_csv/__pycache__/json_to_csv.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bc2b7748dcab48ea6620830fee00db8bfb4f37a9 GIT binary patch literal 3478 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 literal 0 HcmV?d00001 diff --git a/Python Projects/json_to_csv/json_data.json b/Python Projects/json_to_csv/json_data.json new file mode 100644 index 00000000..e7c7e948 --- /dev/null +++ b/Python Projects/json_to_csv/json_data.json @@ -0,0 +1,28 @@ + +[ + { + "name": "Test37", + "status": "done", + "slug": "test-375960", + "date": "13-10-2023", + "author": "unknown", + "probability": "89%", + "result": "70%", + "final_status": "failed", + "connected": { + "run_again": "True", + "next_test": "Test38", + "next_test_status": "pending" + } + }, + { + "name": "Test38", + "status": "pending", + "slug": "test-385960", + "date": "13-10-2023", + "author": "unknown", + "probability": "80%", + "result": "None", + "final_status": "None" + } +] \ No newline at end of file diff --git a/Python Projects/json_to_csv/json_to_csv_with_nested_dict.py b/Python Projects/json_to_csv/json_to_csv_with_nested_dict.py new file mode 100644 index 00000000..bcb23c69 --- /dev/null +++ b/Python Projects/json_to_csv/json_to_csv_with_nested_dict.py @@ -0,0 +1,59 @@ +import json +import csv + +def json_to_csv(json_data, csv_file, mapping=None): + + if isinstance(json_data, list): + # Flatten nested JSON structures. + json_data = [flatten_json(obj) for obj in json_data] + + # Get the column headers from the mapping or from the JSON data itself. + column_headers = mapping or json_data[0].keys() + + # Write the CSV file. + with open(csv_file, "w", newline="") as f: + writer = csv.writer(f) + writer.writerow(column_headers) + for row in json_data: + # Convert nested values to strings. + row_values = [str(row.get(column, "")) for column in column_headers] + writer.writerow(row_values) + +def flatten_json(obj): + + flattened = {} + for key, value in obj.items(): + if isinstance(value, dict): + flattened.update(flatten_json(value)) + elif isinstance(value, list): + for item in value: + flattened["{}.{}".format(key, item)] = item + else: + flattened[key] = value + return flattened + +# sample mapping if needed +mapping = { + "name": "Name", + "status": "Status", + "date": "Date", + "author": "Author", + "probability": "Probability", + "result": "Result", + "final_status": "Final Status", + "connected.run_again": "Run Again", + "connected.next_test": "Next Test", + "connected.next_test_status": "Next Test Status" +} + + +def main(): + # Load the JSON data. + with open("json_data.json", "r") as json_file: + json_data = json.load(json_file) + + # Convert the JSON data to CSV format. + json_to_csv(json_data, "csv_data.csv") + +if __name__ == "__main__": + main()