我有以下要使用python 3解析的json对象:
customerData = {
"Joe": {"visits": 1},
"Carol": {"visits": 2},
"Howard": {"visits": 3},
"Carrie": {"visits": 4}
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下python代码来解析对象:
import json
def greetCustomer(customerData):
response = json.loads(customerData)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
TypeError:JSON对象必须是str,bytes或bytearray,而不是'dict'
ted*_*ted 12
您似乎误解了加载和转储。
json.loads将字符串转换为python对象,json.load将json文件转换为python对象,json.dumps将python对象转换为字符串并将json.dumpjson字符串从python对象写入文件
提示:注意loads并在末尾dumps有一个s,如字符串
customerData = {
"Joe": {"visits": 1},
"Carol": {"visits": 2},
"Howard": {"visits": 3},
"Carrie": {"visits": 4}
}
Run Code Online (Sandbox Code Playgroud)
是定义字典的Python代码。如果你有
customerJSON = """{
"Joe": {"visits": 1},
"Carol": {"visits": 2},
"Howard": {"visits": 3},
"Carrie": {"visits": 4}
}"""
Run Code Online (Sandbox Code Playgroud)
您将拥有一个包含要解析的JSON对象的字符串。(是的,Python语法和JSON语法之间有很多重叠之处。
assert customerData == json.loads(customerJSON)
Run Code Online (Sandbox Code Playgroud)
会过去的。)
但是请注意,并非所有有效的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
]
Run Code Online (Sandbox Code Playgroud)
您可以观察到这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
]
Run Code Online (Sandbox Code Playgroud)
的确是这样dicts[0] == dicts[1] == json.loads(json_str)。但是,
dicts[2] == json.loads(json_str)仅当时为真foo == "foo"。