Created
September 18, 2017 05:57
-
-
Save m0xb/3ab2d5dae1050a6f7baeebba18f95745 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import json | |
| class ObjectEncoder(json.JSONEncoder): | |
| def default(self, o): | |
| return o.__dict__ | |
| class Address: | |
| def __init__(self, street, city, state, zip): | |
| self.street = street | |
| self.city = city | |
| self.state = state | |
| self.zip = zip | |
| @staticmethod | |
| def from_dict(address_dict): | |
| ''' | |
| Makes an Address object from a dict instance that was decoded from JSON | |
| usage: Address.from_dict(...) | |
| ''' | |
| street = address_dict['street'] | |
| city = address_dict['city'] | |
| state = address_dict['state'] | |
| zip = address_dict['zip'] | |
| return Address(street, city, state, zip) | |
| def __repr__(self): | |
| return f"Address({self.street}, {self.city}, {self.state} {self.zip})" | |
| class Person: | |
| def __init__(self, name, addresses): | |
| self.name = name | |
| self.addresses = addresses | |
| @staticmethod | |
| def from_dict(person_dict): | |
| ''' | |
| Makes a Person object from a dict instance that was decoded from JSON | |
| usage: Person.from_dict(...) | |
| ''' | |
| name = person_dict['name'] | |
| addresses = [] | |
| for address_dict in person_dict['addresses']: | |
| addresses.append(Address.from_dict(address_dict)) | |
| return Person(name, addresses) | |
| def __repr__(self): | |
| return f"Person({self.name}, {self.addresses})" | |
| filename = 'person1.json' | |
| with open(filename, 'w') as fp: | |
| json.dump(Person('Dude Duderson', [Address('1600 Pennsylvania Ave NW', 'Washington', 'DC', 20500)]), fp, cls=ObjectEncoder) | |
| with open(filename, 'r') as fp: | |
| person_dict = json.load(fp) | |
| print(f"person_dict: {person_dict}") | |
| p = Person.from_dict(person_dict) | |
| print(f"Person: {p}") |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Output: