V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
wdc63
V2EX  ›  Python

求助, str 转 dic 问题。

  •  
  •   wdc63 · 2017-03-26 23:49:54 +08:00 · 3588 次点击
    这是一个创建于 2802 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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
    谢谢
    11 条回复    2017-04-13 18:27:01 +08:00
    seki
        1
    seki  
       2017-03-26 23:53:18 +08:00
    你这个不是 json 吗, json parse
    wdc63
        2
    wdc63  
    OP
       2017-03-26 23:55:57 +08:00
    json.loads()?
    这是 PY 不是 JS
    bazingaterry
        3
    bazingaterry  
       2017-03-26 23:56:14 +08:00 via iPhone
    json.loads
    wdc63
        4
    wdc63  
    OP
       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
        5
    bxb100  
       2017-03-26 23:58:13 +08:00 via Android
    string 不能转 dict,用 json 处理
    wdc63
        6
    wdc63  
    OP
       2017-03-27 00:04:52 +08:00
    @bxb100 尝试 json.loads()会抛出异常: Unexpected UTF-8 BOM
    billlee
        7
    billlee  
       2017-03-27 00:07:59 +08:00
    r#6 @wdc63 BOM 问题,那就再试试 json.loads(a[1:]) 或者 json.loads(a[3:])
    wdc63
        8
    wdc63  
    OP
       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
        9
    wdc63  
    OP
       2017-03-27 00:09:00 +08:00
    @billlee 谢谢
    wycs11
        10
    wycs11  
       2017-03-27 14:49:35 +08:00
    import simplejson
    simplejson.loads(a)
    romanticbao
        11
    romanticbao  
       2017-04-13 18:27:01 +08:00
    这个问题可以先用 repr 把数据打出来看看,根据具体问题进行替换或者采用其他解决方式,然后再用 eval 解决。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1198 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:32 · PVG 02:32 · LAX 10:32 · JFK 13:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.