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
shoumu
V2EX  ›  Python

python 解析服务器返回的 json 数据

  •  
  •   shoumu ·
    shoumu · 2014-05-11 12:47:30 +08:00 · 5176 次点击
    这是一个创建于 3847 天前的主题,其中的信息可能已经有所发展或是发生改变。
    服务器返回json数据中带有 'a': true 这样的条目,用python自带的json模块解析会出错
    raise ValueError("No JSON object could be decoded")
    ValueError: No JSON object could be decoded
    请问有什么方法解析呢
    11 条回复    2014-05-11 17:03:20 +08:00
    ferock
        1
    ferock  
       2014-05-11 12:49:55 +08:00
    服务器的返回也太不规范了
    yyfearth
        2
    yyfearth  
       2014-05-11 12:52:43 +08:00
    估计是用String拼出来的
    yyfearth
        3
    yyfearth  
       2014-05-11 12:54:27 +08:00
    如果还算标准 可以尝试用 " 替换掉所有 '
    如果有没有引号的情况 那要用正则把key加上引号
    如果还不行 那么就没有办法了 估计只有js eval可以解析了
    shoumu
        4
    shoumu  
    OP
       2014-05-11 13:12:51 +08:00
    @yyfearth 在命令行中测试是可行的的
    >>> jsonStr = '{"a":true}'
    >>> a = json.loads(jsonStr)
    >>> a
    {u'a': True}
    但是一些到文件中,再读取出来就不行了
    winkidney
        5
    winkidney  
       2014-05-11 13:44:24 +08:00
    考虑是不是unicode问题?返回的jso是gbk还是utf-8?编码错误可能性比较大的感觉……
    shoumu
        6
    shoumu  
    OP
       2014-05-11 14:12:54 +08:00
    @winkidney 可能编码问题,我自己的那些数据是放在一个txt文件里。从同学那里拿了一个json文件,将txt文件里的数据复制到那个文件中,就能够正确解析了,很诡异。
    在sublime中显示我的txt编码为:UTF-8 with BOM,另一个json文件直接是UTF-8
    polythene
        7
    polythene  
       2014-05-11 14:15:35 +08:00   ❤️ 1
    @shoumu 不要加BOM,BOM会在前面插入3个额外字符,json库当然不认了
    ericls
        8
    ericls  
       2014-05-11 14:28:10 +08:00   ❤️ 1
    json.loads(foo,strict=False)
    winkidney
        9
    winkidney  
       2014-05-11 15:19:15 +08:00   ❤️ 1
    @shoumu BOM会让python读取错误的,你去掉BOM,网上一大堆教程,随意一搜~
    est
        10
    est  
       2014-05-11 15:38:04 +08:00   ❤️ 1
    @shoumu 这么久还没人发现问题嘛。。我来回答好了。json标准禁止使用单引号。
    shoumu
        11
    shoumu  
    OP
       2014-05-11 17:03:20 +08:00
    @est 不好意思,问题中的 'a': true 我打错了,应该是双引号,应该是BOM的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   969 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:52 · PVG 05:52 · LAX 13:52 · JFK 16:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.