diff --git a/Python/json_inversion/README.md b/Python/json_inversion/README.md new file mode 100644 index 0000000..af90073 --- /dev/null +++ b/Python/json_inversion/README.md @@ -0,0 +1,45 @@ +# JSON Inversion +by Nate Allen (github.com/nateonmission) + +I frequently have data that is shaped like this: + +``` +{ + "age": + { + "user_1": 25, + "user_2": 35, + "user_3": 40 + }, + "first_name": + { + "user_1": "John", + "user_2": "Mary", + "user_3": "Lee" + } +} +``` + +BUT I need it to look like this: +``` +{ + "user_1": + { + "age": 25, + first_name: "John" + }, + "user_2": + { + "age": 35, + "first_name": "Mary" + }, + "user_3": + { + "age": 40, + "first_name": "Lee" + } +} + +``` + +This algorithm does just that. \ No newline at end of file diff --git a/Python/json_inversion/json_inversion.py b/Python/json_inversion/json_inversion.py new file mode 100644 index 0000000..08fd593 --- /dev/null +++ b/Python/json_inversion/json_inversion.py @@ -0,0 +1,24 @@ + + +def invert_json(json_data, output_file_name="output.txt") + new_attributes = [] + new_dict_of_dicts = {} + data = json.loads(json_data) + + for key in data.keys(): + new_attributes.append(key) + + for key in data[new_attributes[0]].keys(): + new_dict_of_dicts[key] = {} + + for category, obj in data.items(): + for person, value in obj.items(): + new_dict_of_dicts[person][category] = value + + back_to_json_str = json.dumps(new_dict_of_dicts) + + # Print to outputfile + with open(output_file_name, "w") as outfile: + outfile.write(back_to_json_str) + + return back_to_json_str