
1 geelaw 2021-05-05 21:45:34 +08:00 via iPhone 不确定你的 dumps 是什么,但我猜是 json.dumps 。原因是你没有正确 balance 序列化和解析的次数,read 方法得到的已经是字符串,接下来先 dumps 又 loads,两个操作抵消,自然只会得到一个字符串。 正确的做法是 read 的返回值直接 loads 。 |
3 simple2025 2021-05-05 22:17:14 +08:00 @ALLROBOT 你 print 下 header 看一下, print(repr(header_.read()) |
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=', '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 simple2025 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 嘛,找个终端试试就知道了。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()) 这样编辑器就不会报错了,读写文件其实没啥毛病的哈哈 |