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

python 如何判断一个字符串是不是 json 格式数据

  •  
  •   null0z · 2016-04-08 22:44:45 +08:00 via iPhone · 13389 次点击
    这是一个创建于 3151 天前的主题,其中的信息可能已经有所发展或是发生改变。
    15 条回复    2016-04-09 21:39:18 +08:00
    shuax
        2
    shuax  
       2016-04-08 23:26:44 +08:00
    try 一下能不能 load 咯
    toono
        3
    toono  
       2016-04-09 00:12:58 +08:00
    ```python
    import json

    def is_json(myjson):
    try:
    json_object = json.loads(myjson)
    except ValueError, e:
    return False
    return True
    ```
    我只是搬运一下上面的 stack overflow 的答案。
    如果使用 json.loads() 方法抛出 ValueError 的话即是解析错误。
    toono
        4
    toono  
       2016-04-09 00:13:47 +08:00   ❤️ 1
    ``` python
    import json

    def is_json(myjson):
    try:
    json_object = json.loads(myjson)
    except ValueError, e:
    return False
    return True
    ```
    我只是搬运一下上面的 stack overflow 的答案。
    如果使用 json.loads() 方法抛出 ValueError 的话即是解析错误。
    qqmishi
        5
    qqmishi  
       2016-04-09 01:29:26 +08:00
    json.loads()解析一下就好了
    SoloCompany
        6
    SoloCompany  
       2016-04-09 02:19:03 +08:00   ❤️ 1
    其实
    如果你的目的不是准确的格式检查
    而仅仅是希望数据格式自动适配
    并且常用的数据类型都是 object 而不是 array
    直接判断一下第一个字符是不是 { 就好了
    如果希望自动适配 array 的话,就多判断一下第一个字符是不是 [ 呗
    florije
        7
    florije  
       2016-04-09 06:46:45 +08:00   ❤️ 1
    json.loads('10086')
    florije
        8
    florije  
       2016-04-09 06:48:43 +08:00   ❤️ 1
    json loads 之后不异常,看数据是 dict 或者 array 就可以了其实。
    null0z
        9
    null0z  
    OP
       2016-04-09 08:02:25 +08:00
    @wenyu1001 感谢, baidu , bing 都没有检索到。。被墙真难受,本来觉得 try 不优雅的,看来还是得 try ,感谢
    pynix
        10
    pynix  
       2016-04-09 10:39:40 +08:00
    感觉 xy problem
    calease
        11
    calease  
       2016-04-09 10:49:10 +08:00   ❤️ 1
    @florije json 不止 dict 和 array 。
    @null0z 如果很多地方要用的话可以用 contextlib.contextmanager wrap 一下。

    @ contextmanager
    def json_deserializer(my_str):
    try:
    yield json.loads(my_str)
    except:
    print "not valid json"

    with json_deserializer(my_str) as my_json_object:
    print "%s is deserialized into %s" % (my_str, my_json_object)
    vob636
        12
    vob636  
       2016-04-09 17:02:46 +08:00   ❤️ 1
    @calease 标准 json 需要 dict 包裹……,不标准的限制的 array 。
    florije
        13
    florije  
       2016-04-09 17:04:01 +08:00
    @vob636 确实是有这说法,不过 @calease 说的是,只考虑简单问题了,不过话说 LZ 的情况也能解决了吧貌似。
    calease
        14
    calease  
       2016-04-09 21:12:24 +08:00   ❤️ 1
    @vob636
    @florije
    没听说过这种说法。有出处吗?
    RFC 上说 json 有 6 种 data types ,并且也没有指明任何哪种是 standard 的。
    null0z
        15
    null0z  
    OP
       2016-04-09 21:39:18 +08:00
    @calease 问题解决啦!很棒!感谢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2686 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:48 · PVG 18:48 · LAX 02:48 · JFK 05:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.