这就是我现在所得到的。
import urllib2
import json
from pprint import pprint
response = urllib2.urlopen('http://census.soe.com/get/ps2:v2/weapon_datasheet?c:start=0&c:limit=1&c:show=capacity,clip_size,damage,fire_rate_ms,item_id,reload_ms')
response1 = urllib2.urlopen('http://census.soe.com/get/ps2:v2/item?c:start=0&c:limit=1&c:show=name.en,description.en,item_id')
data = json.load(response)
data1 = json.load(response1)
pprint(data)
pprint(data1)
class Weapon(object):
"""Creates a PlanetSide2 Weapon"""
def __init__(self, capacity, clip_size, damage, fire_rate_ms, itemd_id,
reload_ms, description, name):
self.capacity = capacity
self.clip_size = clip_size
self.damage = damage
self.fire_rate_ms = fire_rate_ms
self.item_id = item_id
self.reload_ms = reload_ms
self.description = description
self.name = name
现在我的数据看起来像这样。
{u'returned': 1,
u'weapon_datasheet_list': [{u'capacity': u'210',
u'clip_size': u'30',
u'damage': u'143',
u'fire_rate_ms': u'75',
u'item_id': u'73',
u'reload_ms': u'2455'}]}
{u'item_list': [{u'description': {u'en': u"The New Conglomerate's Mag-Cutter features a powerful electromagnet capable of cutting through enemy body armor."},
u'item_id': u'1',
u'name': {u'en': u'Mag-Cutter'}}],
u'returned': 1}
有没有办法使用json中的数据用武器名称初始化武器对象?
例如,。 Mag-Cutter = Weapon(data from json file)
如何从json文件数据中读取设置Weapon
类变量?
答案 0 :(得分:3)
当然,使用data['weapon_datasheet_list']
的第一个元素加上data1['item_list']
的第一个元素中的一些数据:
name = data1['item_list'][0]['name']['en']
description = data1['item_list'][0]['description']['en']
mag_cutter = Weapon(name=name, description=description,
**data['weapon_datasheet_list'][0])
这将第一个weapon_datasheet_list
项的所有应用为Weapon()
构造函数的关键字参数,将该字典中的键与构造函数的参数名称相匹配。我手动提供的其余两项name
和description
。
这确实意味着您需要更正Weapon.__init__
签名中的拼写错误; itemd_id
应拼写item_id
以匹配JSON结构。
演示:
>>> import urllib2
>>> import json
>>> from pprint import pprint
>>> response = urllib2.urlopen('http://census.soe.com/get/ps2:v2/weapon_datasheet?c:start=0&c:limit=1&c:show=capacity,clip_size,damage,fire_rate_ms,item_id,reload_ms')
>>> response1 = urllib2.urlopen('http://census.soe.com/get/ps2:v2/item?c:start=0&c:limit=1&c:show=name.en,description.en,item_id')
>>> data = json.load(response)
>>> data1 = json.load(response1)
>>> class Weapon(object):
... """Creates a PlanetSide2 Weapon"""
... def __init__(self, capacity, clip_size, damage, fire_rate_ms, item_id,
... reload_ms, description, name):
... self.capacity = capacity
... self.clip_size = clip_size
... self.damage = damage
... self.fire_rate_ms = fire_rate_ms
... self.item_id = item_id
... self.reload_ms = reload_ms
... self.description = description
... self.name = name
...
>>> name = data1['item_list'][0]['name']['en']
>>> description = data1['item_list'][0]['description']['en']
>>> mag_cutter = Weapon(name=name, description=description,
... **data['weapon_datasheet_list'][0])
>>> pprint(vars(mag_cutter))
{'capacity': u'210',
'clip_size': u'30',
'damage': u'143',
'description': u"The New Conglomerate's Mag-Cutter features a powerful electromagnet capable of cutting through enemy body armor.",
'fire_rate_ms': u'75',
'item_id': u'73',
'name': u'Mag-Cutter',
'reload_ms': u'2455'}