爬虫121 发表于 2023-8-2 02:22:06

字符串内容为字典类型用“” 与 ‘’ 定义数剧的区别,‘’为啥会报错

# 以下展示了Python如何解码JSON对象
# jsonData = '{'a':1,'b':2,'c':3,'d':4,'e':5}'这句代码报错
jsonData1 = '{"a":1,"b":2,"c":3,"d":4,"e":5}'
jsonData1_2 = '[{"a":1,"b":2,"c":3,"d":4,"e":5}]'

text1 = json.loads(jsonData1)
text1_2 = json.loads(jsonData1_2)
print(text1)
print(text1_2)

jsonData = '{'a':1,'b':2,'c':3,'d':4,'e':5}'这句代码报错

jsonData1 = '{"a":1,"b":2,"c":3,"d":4,"e":5}'

请问为什么' '定义的字典会报错啊,我按照网上的例子打的程序,谢谢

isdkz 发表于 2023-8-2 02:22:17

在Python中,字典是由键值对组成的数据结构,键和值之间使用冒号 ":" 分隔,整个字典使用花括号 "{}" 包围。而字符串是由引号包围的一串字符。

在你提供的代码中, jsonData1是一个合法的JSON格式字符串,它用双引号 " " 定义键和值,因此它可以被成功解码为一个Python字典对象。而 jsonData使用的是单引号 ' ' 来定义键和值,导致它不符合JSON的规范,因此会导致解码时报错。

要修正这个问题,你应该使用双引号 " " 来定义键和值,就像jsonData1中那样。修改后的代码如下:

jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'
jsonData1 = '{"a":1,"b":2,"c":3,"d":4,"e":5}'
jsonData1_2 = '[{"a":1,"b":2,"c":3,"d":4,"e":5}]'

import json

text = json.loads(jsonData)
text1 = json.loads(jsonData1)
text1_2 = json.loads(jsonData1_2)

print(text)
print(text1)
print(text1_2)


这样,你的代码就能够正确地将JSON格式的字符串解码为对应的Python数据结构,而不再报错。

Mike_python小 发表于 2023-8-2 07:35:04

在Python中,使用单引号(')和双引号(")都可以用来定义字符串。然而,当你在定义字典时,需要确保字符串的外层引号与字典的键使用的引号不同。

在你提供的代码中,jsonData 的定义使用了单引号来包裹整个字符串,但是字典的键使用了单引号。这导致了语法错误,因为在单引号字符串内部包含了单引号字符。

要修复这个问题,你可以使用转义字符(\)来表示引号,或者在外层使用双引号来定义字符串。下面是两种修正方法的示例:


jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'


或者


jsonData = '{'a':1,'b':2,'c':3,'d':4,'e':5}'


这样,你就可以正确地定义一个包含字典内容的字符串了。

希望能解答你的疑问!如果还有其他问题,请随时提问。

爬虫121 发表于 2023-8-2 08:01:54

Mike_python小 发表于 2023-8-2 07:35
在Python中,使用单引号(')和双引号(")都可以用来定义字符串。然而,当你在定义字典时,需要确保字符串 ...

转义字符'/'没有用到啊,修改格式没改

Mike_python小 发表于 2023-8-2 08:04:38

爬虫121 发表于 2023-8-2 05:01
转义字符'/'没有用到啊,修改格式没改

论坛好像会吞转义字符

再解释一遍把
jsonData = '{'a':1,'b':2,'c':3,'d':4,'e':5}'
这个代码用的都是单引号也就是' 你有这么多单引号,编辑器就分不清你的单引号到底是和哪个单引号配对,所以需要用到外层双引号,内层单引号

Mike_python小 发表于 2023-8-2 08:05:10

爬虫121 发表于 2023-8-2 05:01
转义字符'/'没有用到啊,修改格式没改

要想用单引号的话,参考这个代码jsonData = '{\'a\':1,\'b\':2,\'c\':3,\'d\':4,\'e\':5}'

爬虫121 发表于 2023-8-2 08:06:03

Mike_python小 发表于 2023-8-2 08:04
论坛好像会吞转义字符

再解释一遍把


最佳答案给你,解释了原因,给出两种解决方案。

爬虫121 发表于 2023-8-2 08:07:35

注意!转义字符串的,解决程序在楼下,最佳答案里面没显示
页: [1]
查看完整版本: 字符串内容为字典类型用“” 与 ‘’ 定义数剧的区别,‘’为啥会报错