2017-08-02 232 views
0

我使用:如何将JSON对象转换为Python对象?

json_str = '{"name":"Saeron", "age":23, "score":100}' 
def json2dict(d): 
    return dict(d['name'],d['age'],d['score']) 
d = json.loads(json_str, object_hook=json2dict) 
print(d.name) 

却得到一个错误:

Traceback (most recent call last): 
    File "C:/Users/40471/PycharmProjects/untitled/untitled.py", line 693, in <module> 
    d = json.loads(json_str, object_hook=json2dict) 
    File "C:\Program Files\Python36\lib\json\__init__.py", line 367, in loads 
    return cls(**kw).decode(s) 
    File "C:\Program Files\Python36\lib\json\decoder.py", line 339, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "C:\Program Files\Python36\lib\json\decoder.py", line 355, in raw_decode 
    obj, end = self.scan_once(s, idx) 
    File "C:/Users/40471/PycharmProjects/untitled/untitled.py", line 692, in json2dict 
    return dict(d['name'],d['age'],d['score']) 
TypeError: dict expected at most 1 arguments, got 3 

我遵循的指示unpickle一个JSON obj转换为一个Python obj中的步骤,就像这样:

json_str = '{"age": 20, "score": 88, "name": "Bob"}' 
print(json.loads(json_str, object_hook=dict2student)) 

为什么不能在字典中生效?我该如何修改?

+1

删除'object_hook',你并不需要它。 –

+1

或者,您可以使用'return dict(** d)',但它是多余的,因为'json.loads'会自动将您的json转换为字典。 –

回答

2

一旦您使用d = json.loads(json_str)加载json d是python字典 您无法使用。(点)获取该项目。

您需要:

json_str = '{"name":"Saeron", "age":23, "score":100}' 
d = json.loads(json_str) 
print(d['name']) 
2

json.loads可以直接评估你的字符串作为一个Python解释如下:

json_str = '{"name":"Saeron", "age":23, "score":100}' 
d = json.loads(json_str) 
print(d['name']) 
>>>Saeron 

您通过object_hook参数传入通过该功能将收到这是字典从给定的字符串创建输入