Python - 使用可选的键/值参数从JSON创建对象

时间:2017-08-23 00:18:09

标签: python json

尝试根据以JSON格式获取的名称/值对创建对象

e.g。

json = {'name': 'ruby',
        'type': 'rare',
        'size': {'weight': '5', 'height': '2'}
       }

但名称/值可以是可选的。所以它也可以是

形式
json = {'name': 'saph',
        'size': {'height': '4'}
        #'type' and 'height' have been omitted
       }

我试过了

class Gem(object):
    def __init__(self, **params):
        self.name = params['name']
        self.type = params['type']
        self.size = params['size']

gem = Gem(**json)

但期望所有参数都可用。

我希望最终能够访问该对象的属性,例如

print(gem.name) #prints 'ruby'
print(gem.type) #prints 'rare'

3 个答案:

答案 0 :(得分:5)

get()与默认值一起使用:

self.type = params.get('type', '')

答案 1 :(得分:1)

当您执行此操作type时,您正尝试访问未定义的密钥self.type = params['type']

这将抛出KeyError

您可能想要使用:

self.type = params.get('type', '') #sets self.type to '' empty string
self.type = params.get('type') #sets self.type to None

答案 2 :(得分:0)

class Gem(object):
    def __init__(self, **params):
        self.name = params['name'] if 'name' in params else None
        self.type = params['type'] if 'type' in params else None
        self.size = params['size'] if 'size' in params else None

gem = Gem(**json)

如果不将密钥保留为None

,我会首先检查密钥是否存在