尝试使用python 3加载JSON对象时出错

时间:2018-03-20 13:19:52

标签: python json

我有以下json对象,我试图用python 3解析:

customerData = {   
 "Joe": {"visits": 1},  
 "Carol":  {"visits": 2},  
 "Howard": {"visits": 3},  
 "Carrie": {"visits": 4}  
}

我使用以下python代码来解析对象:

import json 

def greetCustomer(customerData):
    response = json.loads(customerData)

我收到以下错误:

  

TypeError:JSON对象必须是str,bytes或bytearray,而不是'dict'

2 个答案:

答案 0 :(得分:5)

customerData = {   
 "Joe": {"visits": 1},  
 "Carol":  {"visits": 2},  
 "Howard": {"visits": 3},  
 "Carrie": {"visits": 4}  
}

是定义字典的Python代码。如果你有

customerJSON = """{   
 "Joe": {"visits": 1},  
 "Carol":  {"visits": 2},  
 "Howard": {"visits": 3},  
 "Carrie": {"visits": 4}  
}"""

您将拥有一个包含要解析的JSON对象的字符串。 (是的,Python语法和JSON语法之间存在很多重叠。

assert customerData == json.loads(customerJSON)

会通过。)

但请注意,所有有效的Python都不像有效的JSON。

以下是三个不同的JSON字符串,它们编码同一个对象:

json_strs = [
 "{'foo': 'bar'}",  # invalid JSON, uses single quotes
 '{"foo": "bar"}',  # valid JSON, uses double quotes
 '{foo: "bar"}'     # valid JSON, quotes around key can be omitted
]

您可以观察到all(json.loads(x) == {'foo': 'bar'} for x in json_strs)为真,因为所有三个字符串都编码相同的Python字典。

相反,我们可以定义三个Python dicts,前两个是相同的。

json_str = json_strs[0]  # Just to pick one
foo = ...  # Some value
dicts = [
  {'foo': 'bar'},     # valid Python dict
  {"foo": "bar"},     # valid Python dict
  {foo: "bar"}        # valid Python dict *if* foo is a hashable value
                      # and not necessarily 
]

dicts[0] == dicts[1] == json.loads(json_str)确实如此。然而, dicts[2] == json.loads(json_str)仅在foo == "foo"时才会生效。

答案 1 :(得分:0)

你似乎错误地加载和转储。

json.loads将字符串转换为python对象,json.load将json文件转换为python对象,而json.dumps将python对象转换为字符串,json.dump写入json字符串到python对象的文件