1
geelaw 2021-05-05 21:45:34 +08:00 via iPhone
不确定你的 dumps 是什么,但我猜是 json.dumps 。原因是你没有正确 balance 序列化和解析的次数,read 方法得到的已经是字符串,接下来先 dumps 又 loads,两个操作抵消,自然只会得到一个字符串。
正确的做法是 read 的返回值直接 loads 。 |
2
ALLROBOT OP @geelaw
dumps 的是 stream_header.txt 的文本,上面{xxx}的就是了 我也是挺无奈的,不这样改就报错 JSONDecodeError: Expecting property name enclosed in double quotes,错误最早的序列位置在 with open 这两个函数。。。 明明 str 的值没用单引号啥。。 |
4
ferencz 2021-05-05 22:25:07 +08:00
from json import loads
with open('stream_header.txt', 'r', encoding='utf-8') as f: json_text = loads(f.read()) print(json_text, '\n', type(json_text)) 输出: {'appId': 'amp-ios-10000', 'accessToken': 'xxxxxxxxxxxxxxx', 'User-Agent': 'Mozilla/5.0', 'Content-Type': 'application/json;charset=UTF-8', 'Host': 'messageapi.campusphere.net', 'Accept-Encoding': 'gzip'} <class 'dict'> 没毛病啊~ |
5
kkbblzq 2021-05-05 22:28:13 +08:00
如果你这个 dumps 是 json.dumps,那你 dumps 又 loads 当然是文本,如果你 loads 报错 dumps 一遍又不能解决问题。。。这 dumps 纯属掩耳盗铃
|
6
renmu123 2021-05-05 22:30:03 +08:00 via Android
json.loads 会将 json 反序列化为 python 对象
d 是 json 中的 object 所以反序列化成了 dict,有那里奇怪的吗? |
9
ALLROBOT OP pycharm 社区版的,python 依赖包正常装
|
10
chenqh 2021-05-05 22:59:54 +08:00
@ALLROBOT 我知道了,你要把控 header_.read() 保存到一个变量里面
``` with open("stream_header.txt","r")as header_: r = header_.read() print(repr(r)) header = json.loads(r) print(type(header)) ``` header=json.loads(dumps(header_.read())) print(type(header)) |
11
imycc 2021-05-05 23:03:15 +08:00 1
嘛,找个终端试试就知道了。dumps 和 loads,一个负责序列化一个负责反序列化,写入文件前序列化一次,从文件读回来的时候就要反序列化一次。多或者少都会出问题。
In [1]: import json In [2]: json.loads('{"foo": "bar"}') Out[2]: {'foo': 'bar'} In [3]: json.dumps('{"foo": "bar"}') Out[3]: '"{\\"foo\\": \\"bar\\"}"' In [4]: json.loads(json.dumps('{"foo": "bar"}')) Out[4]: '{"foo": "bar"}' 直接回归到原本的问题,为什么从文件里面加载不出数据就好。看报错只是说有属性没用双括号括起来。 你存进去文件里面的时候,也要用 json.dump 存进去,才是合法的 json 字符串。直接 print 一个字典就粘贴进去文件是不对的,非常常见的新手错误。 && 如果涉及到的都是文件的操作,只需要将打开的文件对象给 json.load 和 json.dump 操作就好,不需要读成字符串再调用 json.loads with open('xxx.txt') as fp: data = json.load(fp) |
12
ALLROBOT OP @ALLROBOT
搞懂 AttributeError: 'str' object has no attribute 'items'发生原因了。。。header 得改 dict 类型,body 改 str 类型 # 读取协议头 with open("stream_header.txt")as header_: header=loads(header_.read()) # 读取学生身份 id 以及时间戳 with open("old_identity_information.txt")as old_: date=(old_.read()) 这样编辑器就不会报错了,读写文件其实没啥毛病的哈哈 |