我正在分阶段教自己python,并开始使用JSON来帮助我的基本小项目。 我有一个武器对象
class actionAttack():
'''
name String
hit Int bonus to hit
dam Int damage bonus
dice Tuple(0,1) damage dice xDy
'''
def __init__(self, name, hit, dam, diceTuple):
self.name = name
self.hit = hit
self.dam = dam
self.diceTuple = diceTuple
描述武器的JSON文件:
{
"__WEAPON__":True,
"name": "Sword",
"hit": 5,
"dam": 2,
"diceTuple":[2, 6]
}
我根据我正在阅读的教程创建了一个解码器,我有以下内容:
import json
def decode_weapon(dct):
if '__WEAPON__' in dct:
return actionAttack(dct["name"], dct["hit"], dct["dam"], dct["diceTuple"])
return dct
with open('data_test.json') as attack_data:
data = attack_data.read()
attackDict = json.loads(data, object_hook=decode_weapon)
编译时,我收到以下错误:
Traceback (most recent call last):
File "test.py", line 18, in <module>
attackDict = json.loads(data, object_hook=decode_weapon)
File "C:\Python36\lib\json\__init__.py", line 367, in loads
return cls(**kw).decode(s)
File "C:\Python36\lib\json\decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Python36\lib\json\decoder.py", line 357, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 2 column 15 (char 16)
答案 0 :(得分:2)
由于json来自java脚本而不是来自Python,因此'True'值是用小写t编写的。
将'True'更改为'true'。
答案 1 :(得分:1)
True
不是有效的json对象 - 您可能需要true
。
更好的方式来标记&#39;您的类型/类的对象可能使用"__class__" : "weapon"
,那么您将知道所有类都具有"class"
属性。 E.g。
{
"__class__": "weapon",
"name": "Sword",
"hit": 5,
"dam": 2,
"diceTuple":[2, 6]
}
然后:
def decode_weapon(dct):
if dct['__class__'] != 'weapon':
raise ValueError("Not a valid weapon dictionary")
return actionAttack(dct["name"], dct["hit"], dct["dam"], dct["diceTuple"])