我尝试用python 3解析以下json对象:
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、字节或字节数组,而不是“dict”
发布于 2018-03-20 05:22:13
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,其中前两个是相同的。
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"
时才是正确的。
发布于 2018-03-20 05:24:46
你好像弄错了货和垃圾堆。
json.loads
将字符串转换为python对象,json.load
将json文件转换为python对象,而json.dumps
将python对象转换为字符串,json.dump
将json字符串从python对象写入文件。
提示:注意loads
和dumps
在结尾处有一个s,如string中的
https://stackoverflow.com/questions/49385363
复制相似问题