求助, str 转 dic 问题。

2017-03-26 23:49:54 +08:00
 wdc63
a 为 string 类型
{"ret":0,"msg":"OK","data":[{"code":"000502","name":"绿景控股","total":1900,"cansel":1900,"newprice":17.25,"costprice":17.299},{"code":"002758","name":"华通医药","total":1100,"cansel":1100,"newprice":28.25,"costprice":28.354},{"code":"002778","name":"高科石化","total":800,"cansel":800,"newprice":39.01,"costprice":38.979}]}
请问如何高效将其转换为 dic 类型
直接采用 eval()函数失败,错误代码 SyntaxError: invalid character in identifier
谢谢
3525 次点击
所在节点    Python
11 条回复
seki
2017-03-26 23:53:18 +08:00
你这个不是 json 吗, json parse
wdc63
2017-03-26 23:55:57 +08:00
json.loads()?
这是 PY 不是 JS
bazingaterry
2017-03-26 23:56:14 +08:00
json.loads
wdc63
2017-03-26 23:56:26 +08:00
json.loads(a)返回异常 json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column 1 (char 0)
bxb100
2017-03-26 23:58:13 +08:00
string 不能转 dict,用 json 处理
wdc63
2017-03-27 00:04:52 +08:00
@bxb100 尝试 json.loads()会抛出异常: Unexpected UTF-8 BOM
billlee
2017-03-27 00:07:59 +08:00
r#6 @wdc63 BOM 问题,那就再试试 json.loads(a[1:]) 或者 json.loads(a[3:])
wdc63
2017-03-27 00:08:04 +08:00
找到解决方案了
if a.startswith(u'\ufeff'):
a = a.encode('utf8')[3:].decode('utf8')
然后再 json.loads(a)
百度到的, text 包含 BOM 字符,在线接口编码的问题吧,谢谢各位。
wdc63
2017-03-27 00:09:00 +08:00
@billlee 谢谢
wycs11
2017-03-27 14:49:35 +08:00
import simplejson
simplejson.loads(a)
romanticbao
2017-04-13 18:27:01 +08:00
这个问题可以先用 repr 把数据打出来看看,根据具体问题进行替换或者采用其他解决方式,然后再用 eval 解决。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/350485

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX