import json
a = '{"t": 1, "c": "a"}'
a = json.loads(a)
print(a["t"])
这样对字符串转 dict 是正常的。
但是如果
import json
a = "{'t': 1, 'c': 'a'}"
a = json.loads(a)
会报json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
import json
a = "{'t': 1, 'c': 'a'}"
a = json.dumps(a)
a = json.loads(a)
print(a["t"])
在进行loads()
的时候没有报错,但是在调用的时候报TypeError: string indices must be integers
看了一圈资料有点懵,JSON 是不允许用单引号括起 key 的,Python 的 JSON 模块可以dumps
转一下再loads
但是就有点没理解了
1
goofool 2017-11-14 15:41:18 +08:00 1
dumps 出去是字符串
loads 回来还是字符串 |
3
fasling 2017-11-14 15:47:00 +08:00 1
a = "{'t': 1, 'c': 'a'}"
这里的 a 并不是一个 json 串。json 得是双引号。你第二段的 json.dumps 和 json.loads 写了没有任何作用。 |
4
pixstone 2017-11-14 15:47:04 +08:00 1
```python
>>> import json >>> a = "{'t': 1, 'c': 'a'}" >>> a = json.dumps(a) >>> a '"{\'t\': 1, \'c\': \'a\'}"' >>> >>> a = json.loads(a) >>> a "{'t': 1, 'c': 'a'}" >>> ``` |
6
pixstone 2017-11-14 15:48:46 +08:00
a = "{'t': 1, 'c': 'a'}" 是 str 不是 dict
所以你一顿操作后,还是 str dict 应该写成 a = {'t': 1, 'c': 'a'} |
9
soulomoon 2017-11-14 15:53:08 +08:00 1
看下报错不就好了吗。。。
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line: 这个是人家 json loader 不认单引号作为属性。 TypeError: string indices must be integers: 这个是你用 a["t"]引用的报错,他说你的 a 是个字符串. |
11
fy 2017-11-14 16:03:10 +08:00
呃 你那个单引号的字符串,不是 JSON 格式。所以不存在 json 转 dict 的问题。
|
12
wuqiangroy 2017-11-14 16:58:08 +08:00
双引号直接用 eval(a)就可以了。
json 不能对 loads 双引号。 你 dumps 前是 str,loads 之后也是 str。 |
13
est 2017-11-14 17:11:23 +08:00
ast.literal_eval 通杀单引号双引号 u'' 引号
|
14
testcount 2017-11-14 17:54:59 +08:00 1
如果没有特别极致的性能要求,看到个 demjson 好像还不错。
|