我有以下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'
答案 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对象的文件