这是我现在得到的。
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
Run Code Online (Sandbox Code Playgroud)
现在我的数据看起来像这样。
{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}
Run Code Online (Sandbox Code Playgroud)
有没有办法使用 json 中的数据来用武器名称初始化武器对象?
例如。Mag-Cutter = Weapon(data from json file)
Weapon我如何从 json 文件数据中读取设置类变量?
当然,使用 的第一个元素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])
Run Code Online (Sandbox Code Playgroud)
这会将所有第一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'}
Run Code Online (Sandbox Code Playgroud)